美文网首页基础前端
仿网易轮播&底部滚动条

仿网易轮播&底部滚动条

作者: CondorHero | 来源:发表于2019-03-31 02:04 被阅读9次
仿网易底部滚动图.gif

实现思路:根据HTML和CSS可以基本知道,网页的基本布局!全部通过定位技术来进行操作,这部分就不解释了,前端页面对着效果自己写,最难得还是JavaScript,涉及到逻辑不会就很难,我的思路,首先让
bar 滚动条动起来。把动起来的监听写出来,通过 onmousedownonmousemove 两个函数来实现。再去算滚动条的长度。根据这个公式来计算图片和滚动条的比例:barwith/700 = 700/allwidth = rate
接着去写图片的运动,运动长度根据滚动条的来,还是用到上面的比例关系。最后添加验证修复小BUG。比较难得操作已经在源码中注释。
源码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>仿网易底部滚动条</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .box {
            width: 700px;
            height: 150px;
            position: absolute;
            left: 50%;
            top: 100px;
            margin-left: -380px;
            padding: 0 30px;
            border: 1px solid #7c7c7c;
            /*background: #ccc;*/
        }
        .box .m_unit {
            position: relative;
            width: 5000px;
        }

        .box .images {
            width: 700px;
            overflow: hidden;
        }

        img {
            width: 100%;
            height: 100%;
        }
        .box .images ul {
            list-style:  none;
        }
        .box .images ul li {
            float: left;
            width: 200px;
            height: 130px;
            margin-right: 10px;
        }
        .box .btns .rightbtn {
            position: absolute;
            right: 0;
            top: 50%;
            height: 65px;
            width: 20px;
            margin-top: -32.5px;
            background: url(images/bar.png) no-repeat -42px 0;
        }
        .box .btns .leftbtn {
            position: absolute;
            left: 0;
            top: 50%;
            height: 65px;
            width: 20px;
            margin-top: -32.5px;
            background: url(images/bar.png);
        }
        .box .bar {
            position: absolute;
            bottom: 0;
            left: 50%;
            height: 20px;
            margin-left: -350px;
            width: 700px;
            background-color: #2b2b2b;
        }
        .span1{
            position: absolute;
            top: 3px;
            left: 0;
            width: 81px;
            height: 15px;
            background: url(images/bg.png) 0 -32px;
        }

        .span2{
            position: absolute;
            width:11px;
            height: 15px;
            background: url(images/bg.png);
        }
        .span3{
            position: absolute;
            top: 0;
            right: 0px;
            width: 11px;
            height: 15px;
            background: url(images/bg.png) -24px 0;
        }
        .span4{
            position: absolute;
            top: 0;
            left: 50%;
            margin-left: -5px;
            width: 10px;
            height: 15px;
            background: url(images/bg.png) -14px 0;
        }
    </style>
</head>
<body>
    <div class="box">
            <div class="btns">
                <div class="rightbtn" id="rightbtn"></div>
                <div class="leftbtn" id="leftbtn"></div>
            </div>
            <div class="images">
                <ul class = "m_unit" id = "m_unit">
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (1).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (2).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (3).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (4).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (5).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (6).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (7).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (8).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (9).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (10).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (11).jpg" alt="动漫"></a></li>
                    <li><a href=""><img src="G:\极简壁纸\七森博客/animate (12).jpg" alt="动漫"></a></li>
                </ul>
            </div>
            <div class="bar">
                <span class="span1"  id="bar">
                    <span class="span2"></span>
                    <span class="span3"></span>
                    <sapn class="span4"></sapn>
                </span>
            </div>
    </div>

    <script>
            //得到操作的元素
            var leftbtn = document.getElementById("leftbtn");
            var rightbtn = document.getElementById("rightbtn");
            var m_unit = document.getElementById("m_unit");
            var bar = document.getElementById("bar");
            //为了计算滚动条的长度,先得出图片总数
            var lislength = m_unit.getElementsByTagName("li").length;
            //得出图片总长,减去最后一个图片的right-margin达到图片紧贴边框;
            var allwidth = lislength*210 -10;
            //根据比例计算出rate,在算出滚动条的宽。以短及长。
            var rate = 700 / allwidth;
            var barwidth = rate * 700;
            //设置初始滚动条长度
            bar.style.width = barwidth + "px";
            //初始滚动条的位置
            var nowbarleft = 0;
            //初始图片的位置
            var nowimageleft = 0;
            //滚动监听
            bar.onmousedown = function(event){
                event = event || window.event;
                deltaX = event.clientX - bar.offsetLeft;
                bar.onmousemove = function(event){
                    event = event || window.event;
                    var nowbarleft = event.clientX - deltaX;
                    //验证,防止滚动条出线
                    if(nowbarleft < 0){
                        nowbarleft = 0; 
                    }else if(nowbarleft>700 - barwidth){
                        //好好推想这个距离,是固定的计算。
                        nowbarleft = 700 - barwidth;
                    }

                    m_unit.style.left = -nowbarleft/rate+ "px";
                    bar.style.left = nowbarleft +"px";
                }
            }
            //滚动监听
            document.onmouseup = function(){
                bar.onmousemove = null;
            }


            rightbtn.onclick = function(){
            
                    //两个信号量的改变
                    nowimageleft -= 200;
                    nowbarleft += 200 * rate ;
                    //验收 左按钮可以和右按钮的验证内容进行替换,
                    //点击的效果就不是轮换的了。
                    if(nowimageleft < -allwidth + 700){
                        nowimageleft = 0;
                        nowbarleft = 0;
                    }

                    m_unit.style.left = nowimageleft + "px";
                    bar.style.left = nowbarleft + "px";
            }

                leftbtn.onclick = function(){
            
                    //两个信号量的改变
                    nowimageleft += 50;
                    nowbarleft -= 50 * rate ;
                    //验收
                    if(nowimageleft >0){
                        nowimageleft = -allwidth + 700;
                        nowbarleft = 700 - barwidth;
                    }

                    m_unit.style.left = nowimageleft + "px";
                    bar.style.left = nowbarleft + "px";
                }
    </script>

</body>
</html>

相关文章

网友评论

    本文标题:仿网易轮播&底部滚动条

    本文链接:https://www.haomeiwen.com/subject/fgnebqtx.html