• 2016年5月25日下午(妙味课堂js预热课程-4笔记二)


    二、无缝滚动

         

    如上图所示,现在很多网页都会实现这样的效果;它是如何实现的呢?

      1、布局

        注意如果想让一个div的位置发生改变,则最好给这个div加上一个绝对定位:position:absolute;

        obj.offsetLeft 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置,整型,单位像素。

      (1)这里插入一个小程序,即如何让Div移动起来:代码如下;

     1 <style>
     2    #div1{100px;height:100px;background:#ccc;position:absolute;left:0;}
     3    </style>
     4     <script type="text/javascript">
     5         window.onload=function () {
     6             var oDiv=document.getElementById("div1");
     7             var oBtn=document.getElementById("btn1");
     8 
     9             oBtn.onclick=function () {
    10                 oDiv.style.left=oDiv.offsetLeft+5+"px";
    11             };
    12         };
    13     </script>
    14 </head>
    15 <body>
    16     <input id="btn1" type="button" value="向右移动" />
    17    <div id="div1"></div>
    18 </body>

      显示效果如下:当点击按钮时,下面的矩形块会向右移动;

                                   

    现在我们来加功能即加一个定时器可以点击按钮时就让矩形块自动向右移动,点击停止移动时矩形就停止移动;代码如下;

    <script type="text/javascript">
            window.onload=function () {
                var oDiv=document.getElementById("div1");
                var oBtn1=document.getElementById("btn1");
                var oBtn2=document.getElementById("btn2");
                var timer=null;
    
                oBtn1.onclick=function () {
                    timer=setInterval(function () {
                        oDiv.style.left=oDiv.offsetLeft+5+"px";
                    },30);
                };
                oBtn2.onclick=function () {
                    clearInterval(timer);
                };
            };
        </script>

      (2)无缝滚动的布局

      首先用html以及css布局如下:

                      

      接下来要让其图片滚动起来即用js添加事件:代码如下;

    <script type="text/javascript">
            window.onload=function () {
                var oDiv=document.getElementById("roll");
                var oUl=oDiv.document.getElementsByTagName("ul")[0];
                var aLi=document.getElementsByTagName("li");
                
                oUl.style.width=aLi[0].offsetWidth*aLi.length+"px";
    
                setInterval(function () {
                        oUl.style.left=oUl.offsetLeft+1+"px";
                    },30);
            }
        </script>

      2、offset

      总共有四种:offsetLeft:左边距

            offsetTop:上边距

            offstWidth:宽度

            offsetHeight:高度

                     

      如图所示当图片一直往左边滚动的时候后面图片为空白,不会接着图片过来,这是什么情况呢?没有达到无缝的情况;要实现其代码为:

    <script type="text/javascript">
            window.onload=function () {
                var oDiv=document.getElementById("roll");
                var oUl=oDiv.document.getElementsByTagName("ul")[0];
                var aLi=document.getElementsByTagName("li");
                var iSpeed=5;
    
                oUl.style.width=aLi[0].offsetWidth*aLi.length+"px";
    
                setInterval(function () {
                        oUl.style.left=oUl.offsetLeft-iSpeed+"px";
                    if(oUl.offsetLeft<-oUl.offsetWidth/2){
                        oUl.style.left="0px";
                    }
                    },30);
            }
        </script>

      然后当鼠标移入的时候我们要改变两边速度的方向;其代码为:

    <script type="text/javascript">
            window.onload=function () {
                var oDiv=document.getElementById("roll");
                var oUl=oDiv.document.getElementsByTagName("ul")[0];
                var aLi=document.getElementsByTagName("li");
                var aBtn=document.getElementsByTagName("a");
                var iSpeed=-5;
    
                oUl.style.width=aLi[0].offsetWidth*aLi.length+"px";
    
                setInterval(function () {
                        oUl.style.left=oUl.offsetLeft+iSpeed+"px";
                    if(oUl.offsetLeft<-oUl.offsetWidth/2){
                        oUl.style.left="0px";
                    }
                    else if (oUl.offsetLeft>0){
                        oUl.style.left=-oUl.offsetWidth/2;
                    }
                    },30);
                aBtn[0].onmousemove=function () {
                    iSpeed=-5;
                };
                aBtn[1].onmouseover=function () {
                    iSpeed=5
                }
            }
        </script>

       因此从上面代码可知:要改变滚动方向需要注意两点:

          1、修改iSpeed

          2、修改判断条件

      (3)鼠标移入暂停

        1、鼠标移入关闭定时器;

        2、移出重新开启定时器。

    <script type="text/javascript">
            window.onload=function () {
                var oDiv=document.getElementById("roll");
                var oUl=oDiv.document.getElementsByTagName("ul")[0];
                var aLi=document.getElementsByTagName("li");
                var aBtn=document.getElementsByTagName("a");
                var iSpeed=-5;
                var timer=null;
    
                oUl.style.width=aLi[0].offsetWidth*aLi.length+"px";
                timer=setInterval(function () {
                        oUl.style.left=oUl.offsetLeft+iSpeed+"px";
                    if(oUl.offsetLeft<-oUl.offsetWidth/2){
                        oUl.style.left="0px";
                    }
                    else if (oUl.offsetLeft>0){
                        oUl.style.left=-oUl.offsetWidth/2;
                    }
                    },30);
                aBtn[0].onmousemove=function () {
                    iSpeed=-5;
                };
                aBtn[1].onmouseover=function () {
                    iSpeed=5
                };
                oUl.onmouseover=function () {
                    clearInterval(timer);
                };
                oUl.onmouseout=function () {
                    clearInterval(timer);
                };
            }
        </script>

      具体细节还要自己再实践才行!!!

      

  • 相关阅读:
    docker 批量删除
    ML
    hdu 1465:不容易系列之一(递推入门题)
    sdut 2162:The Android University ACM Team Selection Contest(第二届山东省省赛原题,模拟题)
    sdut 2163:Identifiers(第二届山东省省赛原题,水题)
    hdu 2108:Shape of HDU(计算几何,判断多边形是否是凸多边形,水题)
    hrbustoj 1545:基础数据结构——顺序表(2)(数据结构,顺序表的实现及基本操作,入门题)
    hdu 1312:Red and Black(DFS搜索,入门题)
    hrbustoj 1429:凸多边形(计算几何,判断点是否在多边形内,二分法)
    poj 1113:Wall(计算几何,求凸包周长)
  • 原文地址:https://www.cnblogs.com/zzjeny/p/5528335.html
Copyright © 2020-2023  润新知