zoukankan      html  css  js  c++  java
  • 无缝连续滚动

    1.简单的无缝连续滚动

    原来:页面上是6个图片,编号012345,复制一倍在后面,长长的火车在来回移动。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <title>Document</title>
        <style type="text/css">
            *{
                margin:0;
                padding:0;
            }
            ul{
                list-style:none;
            }
            .rolling{
                width:800px;
                height:130px;
                border:10px solid #000;
                margin:50px auto;
                position:relative;
                overflow:hidden;
    
            }
            .rolling .m_unit{
                width:5000px;
                position:absolute;
                top:0;
                left:0;
            }
            .rolling ul li{
                float:left;
                margin-right:10px;
            }
        </style>
    </head>
    <body>
       <div class="rolling" id="rolling">
           <div class="m_unit" id="m_unit">
               <ul>
                   <li><a href="###"><img  src="images/shuzi/0.png" /></a></li>
                   <li><a href="###"><img  src="images/shuzi/1.png" /></a></li>
                   <li><a href="###"><img  src="images/shuzi/2.png" /></a></li>
                   <li><a href="###"><img  src="images/shuzi/3.png" /></a></li>
                   <li><a href="###"><img  src="images/shuzi/4.png" /></a></li>
                   <li><a href="###"><img  src="images/shuzi/5.png" /></a></li>
               </ul>
           </div>
       </div>
    
    </body>
    </html>
    <script type="text/javascript">
         var rolling=document.getElementById('rolling');
         var m_unit=document.getElementById('m_unit');
         var listul=m_unit.getElementsByTagName('ul')[0]; //获取ui
         var listlength=m_unit.getElementsByTagName('li').length; //获取li的长度
         listul.innerHTML+=listul.innerHTML; // 复制一倍的li标签
         var timer; //存定时器
         var nowleft=0;
         var zhefandian = -210*listlength;
         //鼠标移入大盒子的时候停止定时器
         rolling.onmouseenter=function(){
          clearInterval(timer);
         }
         rolling.onmouseleave=function(){
          move();
         }
    
        function move(){
            timer=setInterval(function (){
                nowleft-=3;
                if(nowleft<zhefandian){
                    nowleft=0;
                }
                m_unit.style.left=nowleft+'px';
            },10)
        }
        move();
    
    
    
    
    
    </script>

    2.高级无缝滚动

    HTML结构中重复的代码,用js动态的添加。

    ②折返点:不要自己计算,要通过页面加载效果自动获取宽度,折返点的宽度应该等于ul内部所有里元素宽度的一半。方法:li不要添加宽度,浮动的元素被img自动撑宽,ul也不要加宽度,绝对定位的元素用内部的li元素撑宽。

    解决方法有两种:

    方法1:遍历前半部分(复制一倍之前)所有li,进行宽度累加,累加之后就是折返点。

    上午学offsetWidth,但是这个方法不带margin。所以累加的时候,要得到计算后的margin麻烦,所以不考虑方法1

    方法2:折返点就是假火车第一张图的offsetLeft值,所以,如果原理的li个数是liLength,那么假火车的第一张图就是listLength[length]

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
        <title>Document</title>
        <style type="text/css">
               *{
                margin: 0;
                padding: 0;
            }
            ul{
                list-style: none;
            }
            .rolling{
                width: 800px;
                height: 130px;
                border: 10px solid #ccc;
                margin: 100px auto;
                position: relative;
                overflow: hidden;
            }
            .rolling .m_unit{
                /*这是运动的单位*/
                /*这个宽度足以致命,为了让所有的li能够并排*/
                /*这个宽度随便取,大一点*/
                width: 5000px;
                position: absolute;
                top: 0;
                left: 0;
            }
            .rolling ul li{
                float: left;
                margin-right: 10px;
            }
        </style>
    </head>
    <body>
            <div class="rolling" id="rolling">
            <div class="m_unit" id="m_unit">
                <ul>
                    <li><a href=""><img src="images/shuzi/0.png" /></a></li>
                    <li><a href=""><img src="images/shuzi/1.png" /></a></li>
                    <li><a href=""><img src="images/shuzi/2.png" /></a></li>
                    <li><a href=""><img src="images/shuzi/3.png" /></a></li>
                    <li><a href=""><img src="images/shuzi/pangzi.png" /></a></li>
                    <li><a href=""><img src="images/shuzi/4.png" /></a></li>
                    <li><a href=""><img src="images/shuzi/5.png" /></a></li>
                </ul>
            </div>
        </div>
    
    </body>
    </html>
    <script type="text/javascript">
         var rolling =document.getElementById('rolling');
         var m_unit =document.getElementById('m_unit');
         var ullist=m_unit.getElementsByTagName('ul')[0] ; //获取ul
         var lis=m_unit.getElementsByTagName('li'); //获取所有li
         var imgs=m_unit.getElementsByTagName('img'); //获取所有img
       ullist.innerHTML+=ullist.innerHTML; //复制一份ul
       var lislength=lis.length; // 获取所以li的长度,包括新的
       var timer; //存定时器
       var nowleft=0; //定义全局信号量,接收left的运动值。
       var zhefandian;
       //要计算折返点,但每个li宽度不一样,所以假火车开头元素的offsetLef  t就是折返点,这个元素是lis/2
         //但是由于Chrome的机理,如果要读取offsetLeft值必须保证所有图片加载完毕
       var count=0; //图片计数器
       for(var i=0; i<imgs.length; i++){
        imgs[i].onload=function(){
            count++;
            if(count == imgs.length){
                zhefandian=lis[lislength/2].offsetLeft;
            }
        }
       }
    
       rolling.onmouseenter=function(){
          clearInterval(timer);
       }
    
      rolling.onmouseleave=function(){
           move();
       }
    
    
       function move(){
        timer=setInterval(function(){
            nowleft-=3;
            if(nowleft < -zhefandian){
                nowleft=0;
            }
             m_unit.style.left= nowleft+'px';
        },10)
       }
       move();
    
    </script>
  • 相关阅读:
    第一个ExtJS练习(添加用户面板)
    利用高德地图通过给定坐标点画带箭头方向的路径
    安装myeclipse2015 stable 3.0破解之后发生出现SECURITY ALERT:iNTEGRITY CHECK ERROR然后闪退解决方案
    当你的SSM项目中的springmvc.xml发生第一行错误解决方案
    新建maven项目遇到Select an Archetype时没有maven-archetype-webapp处理方法
    XML、HTML、JSON对比
    Mac配置apache2.4.25服务器
    使用HTTP协议访问网络
    android数据持久化存储
    常用git命令
  • 原文地址:https://www.cnblogs.com/smivico/p/7799382.html
Copyright © 2011-2022 走看看