JavaScript仿淘寶實現固定右側側邊欄

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
 
    <style>
        .rightlan {
            position: absolute;
            top: 300px;
            right: 0px
        }
        
        .box {
            position: relative;
            overflow-y: scroll;
            height: 800px;
        }
        
        .toll {
            width: 60px;
            height: 400px;
        }
        
        .toll a {
            /* 後面單獨設置a裡面的個例的時候要註意級別 */
            display: inline-block;
            width: 40px;
            height: 60px;
            text-align: center;
            margin: 5px;
            text-decoration: none;
            color: black
        }
        
        .toll .top {
            display: none;
        }
        
        .neir {
            width: 2000px;
            height: 1000px;
            position: absolute;
            top: 10px;
            right: 100px;
        }
    </style>
</head>
 
<body>
    <div class="box">
        <div class="neir"> 內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容內容</div>
 
        <div class="rightlan">
            <div class="toll">
                <a href="">品質好貨</a>
                <a href="">猜你喜歡</a>
                <a href="" class=" rel="external nofollow" top">頂部</a>
                <a href="">反饋</a>
                <a href="">暴恐舉報</a>
            </div>
        </div>
 
    </div>
    <script>
        //當box滾動的時候,滾動到一定的距離後。top就顯示出來
        var box = document.querySelector('.box')
        var top = document.querySelector('.top')
        var neir = document.querySelector('.neir')
        var toll = document.querySelector('.toll')
        var rightlan = document.querySelector('.rightlan')
        console.log(box)
        box.addEventListener('scroll', function() {
 
            if (box.scrollTop >= 100) { //側邊欄固定
                rightlan.style.top = 100 + box.scrollTop + 'px'
                toll.children[2].style.display = 'block' //z註意級別index。
            } else {
                toll.children[2].style.display = 'none'
            }
        })
    </script>
</body>
 
</html>

1、原先的側邊欄是絕對定位

2、當頁面滾動到一定位置後,側邊欄為固定定位

3、頁面繼續滾動,會上返回頂部顯示出來

問題:滾動一定位置,包含內容的盒子.scrollWidth;但要求是瀏覽器的滾動條

1、需要用到頁面滾動事件scroll,因為是頁面滾動,所以事件源是document

當滾到到banner時,盒子就變為固定定位

2、頁面被卷去的頭部:可以通過window.pageYOffset來獲得,如果是被卷曲的左側window.pageXOffset          (原來問題出在瞭這裡)

3、註意:元素被卷去的頭部是element.scrollTop,如果是頁面被卷去的頭部則是window.pageYOffset

妙啊,對原來的程序做出修改:

    <script>
        //當box滾動的時候,滾動到一定的距離後。top就顯示出來
        var box = document.querySelector('.box')
        var top = document.querySelector('.top')
        var neir = document.querySelector('.neir')
        var toll = document.querySelector('.toll')
        var rightlan = document.querySelector('.rightlan')
 
        document.addEventListener('scroll', function() {
 
            if (window.pageYOffset >= 100) { //側邊欄固定
                rightlan.style.top = 100 + box.scrollTop + 'px'
                toll.children[2].style.display = 'block' //z註意級別index。
            } else {
                toll.children[2].style.display = 'none'
            }
        })
    </script>

就可以實現瞭。隻是忘記瞭盒子改為固定定位 

            if (window.pageYOffset >= 100) { //側邊欄固定
                rightlan.style.position = 'fixed'
                rightlan.style.top = '100px'
                rightlan.style.right = '0px'
                toll.children[2].style.display = 'block' //z註意級別index。
            } else {
                toll.children[2].style.display = 'none'
            }
        })

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        span {
            display: none;
            position: absolute;
            bottom: 0px
        }
        
        .slider-bar {
            width: 40px;
            height: 100px;
            background-color: grey;
            position: absolute;
            top: 360px;
        }
        
        .header,
        .banner,
        .main {
            width: 700px;
            height: 200px;
            margin-top: 30px;
            margin-left: 80px
        }
        
        .header {
            background-color: red;
        }
        
        .banner {
            background-color: blue;
        }
        
        .main {
            background-color: skyblue;
            height: 1900px
        }
    </style>
</head>
 
<body>
    <div class="slider-bar"><span class="goback">返回頂部</span></div>
    <div class="header">頭部區域</div>
    <div class="banner">banner區域</div>
    <div class="main">主體部分</div>
    <script>
        var slider = document.querySelector('.slider-bar')
        var banner = document.querySelector('.banner')
        slider.style.left = banner.offsetLeft + banner.offsetWidth + 'px'
        var a = banner.offsetTop //一定要寫在滾動的前面,不然就不準確
        var goback = document.querySelector('.goback')
            //當側邊欄固定定位之後應該變化的值
        var b = slider.offsetTop - banner.offsetTop
        var main = document.querySelector('.main')
            //主體部分相對於頁面的高度
        var c = main.offsetTop
            //頁面滾動事件
        document.addEventListener('scroll', function() {
            console.log(window.pageYOffset)
                //當頁面被卷去的頭部大於等於262,側邊欄就改為固定定位
            if (window.pageYOffset >= a) {
 
                slider.style.position = 'fixed' //效果會跳一下  這是因為改為固定定位後,top值還是360px不變
                slider.style.top = b + 'px'
            }
            //小於的時候,就改為絕對定位
            else {
                slider.style.position = 'absolute' //效果會跳一下  這是因為改為絕對定位後,還保留瞭固定定位時候的top值
                    //修改top值
                slider.style.top = 360 + 'px'
            }
            //頁面滾動到主體部分時候,goback顯示出
 
            if (window.pageYOffset >= c) {
                goback.style.display = 'block'
            }
            //否則就不顯示
            else {
                goback.style.display = 'none'
            }
        })
    </script>
</body>
 
</html>

fixed:固定定位:元素會被移出正常文檔流,並不為元素預留空間,而是通過指定元素相對於屏幕視口(viewport)的位置來指定元素位置。元素的位置在屏幕滾動時不會改變。打印時,元素會出現在的每頁的固定位置。

使用粘性定位,對slider進行處理,這樣就不需要判斷滾動距離,來對slider的定位進行修改。而是頁面一滾動就設置slider的position屬性為粘性定位,當他到達距離頁面頂部一定距離後,就固定在頁面的某個位置。可以達到相同的效果

    <script>
        var slider = document.querySelector('.slider-bar')
        var banner = document.querySelector('.banner')
        slider.style.left = banner.offsetLeft + banner.offsetWidth + 'px'
        var a = banner.offsetTop //一定要寫在滾動的前面,不然就不準確
        var goback = document.querySelector('.goback')
            //當側邊欄固定定位之後應該變化的值
        var b = slider.offsetTop - banner.offsetTop
        var main = document.querySelector('.main')
            //主體部分相對於頁面的高度
        var c = main.offsetTop
            //頁面滾動事件
        document.addEventListener('scroll', function() {
            console.log(window.pageYOffset)
                //當頁面被卷去的頭部大於等於262,側邊欄就改為固定定位
                // if (window.pageYOffset >= a) { //banner開始出現,設置為粘性定位。
 
            // slider.style.position = 'fixed' //效果會跳一下  這是因為改為固定定位後,top值還是360px不變
            // slider.style.top = b + 'px'
            // }
            slider.style.position = 'fixed'
            slider.style.top = banner.offsetHeight - slider.offsetHeight + 'px'
                //小於的時候,就改為絕對定位
            if (window.pageYOffset < a) {
                slider.style.position = 'absolute' //效果會跳一下  這是因為改為絕對定位後,還保留瞭固定定位時候的top值
                    //修改top值
                slider.style.top = 360 + 'px'
            }
            //頁面滾動到主體部分時候,goback顯示出
 
            if (window.pageYOffset >= c) {
                goback.style.display = 'block'
            }
            //否則就不顯示
            else {
                goback.style.display = 'none'
            }
        })
    </script>

sticky:粘性定位。元素在跨越特定閾值前為相對定位,之後為固定定位

#one { position: sticky; top: 10px; }

在 viewport 視口滾動到元素 top 距離小於 10px 之前,元素為相對定位。之後,元素將固定在與頂部距離 10px 的位置,直到 viewport 視口回滾到閾值以下。

缺點就是兼容性差,當時課上說瞭解,就沒怎麼使用。確實比用JS寫要方便很多

使用粘性定位實現。但是不知道第一種是怎麼實現的。兩個dt間隔一定距離後,上面那個dt就取消粘性定位

<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        article {
            max-width: 600px;
            margin: 1em auto
        }
        
        article h4,
        article footer {
            position: -webkit-sticky;
            position: sticky;
        }
        
        article h4 {
            margin: 2em 0 0;
            background-color: #333;
            padding: 10px;
            color: #fff;
            top: 0px;
            z-index: 1
        }
        
        article content {
            display: block;
            background-color: #ffffe0;
            position: relative;
            padding: 1px 10px
        }
        
        article footer {
            background-color: #f0f3f9;
            padding: 10px;
            z-index: -1;
            bottom: 50vh
        }
    </style>
</head>
 
<body>
    <article>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>123。</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
        <section>
            <h4>
                1234
            </h4>
            <content>
                <p>2323</p>
            </content>
            <footer>評論</footer>
        </section>
    </article>
</body>
 
</html>

以上就是JavaScript仿淘寶實現固定右側側邊欄的詳細內容,更多關於JavaScript固定側邊欄的資料請關註WalkonNet其它相關文章!

推薦閱讀: