• 没事写个幻灯片玩一下,发现了一个问题(已经改正但是不知道为什么)


    没事写个幻灯片玩了一下,开始没有问题,挺好的,后来我把页面最小化了,然后再最大化之后,整个效果就错了,应该是id为ppt的滚动距离错了,不知道怎么回事,有人碰见过类似的问题吗?

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>幻灯片</title>
    <style type="text/css">
    *{ margin:0; padding:0; list-style:none;}
    .pptWrap{ position:relative; width:800px; height:280px; background:#f2f2f2; margin:100px auto; overflow:hidden;}
    .pptWrap img{ display:block;}
    #ppt{ height:280px; display:block; position:absolute; left:0; top:0; width:800px;}
    #ppt li{ float:left;}
    .bot{ position:absolute; width:100%; height:30px; text-align:right; color:#000; bottom:0; left:0; z-index:100;}
    .bot a{display:inline-block; height:18px; width:18px; font-size:14px; color:#fff; text-align:center; line-height:18px; border:1px solid #f4f4f4; background:#6CF; margin:5px 10px 0 0; text-decoration:none;}
    .bot a.active{ border:1px solid #fff; color:#6CF; background:#FF9;}
    .bg{ opacity:0.5; background:#000; position:absolute; bottom:0; left:0; width:100%; height:30px; z-index:99;}
    </style>
    </head>
    <body>
    <div class="pptWrap" id="pptWrap">
            <ul id="ppt">
                <li><img src="images/01.jpg" /></li>
                <li><img src="images/02.jpg" /></li>
                <li><img src="images/03.jpg" /></li>
                <li><img src="images/04.jpg" /></li>
                <li><img src="images/05.jpg" /></li>
            </ul>
    </div>
    </body>
    </html>
    <script type="text/javascript">
    window.onload=function(){
        var now=0;
        var timer=null;
        var wrap=document.getElementById("pptWrap");
        var ppt=document.getElementById("ppt");
        var aLi=ppt.getElementsByTagName("li");
        var step=aLi[0].offsetWidth;
        var num=aLi.length;
        ppt.style.width=step*num+"px";
        var oDiv=document.createElement("div");
        var oDivbg=document.createElement("div");
        oDivbg.className="bg";
        wrap.appendChild(oDivbg)
        oDiv.className="bot";
        for(var i=0;i<aLi.length;i++){
            var aA=document.createElement("a");
            if(i==now){
                aA.className="active";
            }
            aA.innerHTML=i+1;
            aA.setAttribute("href","#");
            oDiv.appendChild(aA);
        }
        
        wrap.appendChild(oDiv)
        
        //生成按钮,且给按钮添加点击滚动效果
        var aa=wrap.getElementsByTagName("a");
        for(var i=0;i<num;i++){
            (function(n){
                aa[n].onclick=function(){            
                    for(var j=0;j<num;j++){
                        aa[j].className="";
                    }
                    now=n;
                    aa[n].className="active";
                    move(ppt,-step*now);
                    
                }
            })(i)
        }
        
        //鼠标移上计时器关闭
        wrap.onmouseover=function(){
            clearInterval(timer);
        }
        
        //鼠标移开后计时器开启
        wrap.onmouseout=function(){
            timer=setInterval(function(){
            for(var j=0;j<num;j++){
                aa[j].className="";
            }
            aa[now].className="active";
            move(ppt,-step*now);
            now++;
            if(now==num){
                now=0;
            }
            
        },2000)    
        }
        
        //默认鼠标移开
        wrap.onmouseout();
        
    
        //运动框架
        function move(obj,target){
            var timer=null;
            clearInterval(timer);
            var speed=parseInt((target-obj.offsetLeft)/10);
            timer=setInterval(function(){
                if(obj.offsetLeft==target){
                    clearInterval(timer);
                }else{
                    if(speed<1){
                        apeed=1;
                        }
                    obj.style.left=obj.offsetLeft+speed+"px";
                }
            },30)
        }    
    }
    </script>

     问题找到了,是因为计时器是公用的,但是也不应该是这样子的吧,但是计时器一旦放在obj上面就不会这样了

    下面是正确的代码,其实上面的错误是出在运动框架之上的,

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>幻灯片</title>
    <style type="text/css">
    *{ margin:0; padding:0; list-style:none;}
    .pptWrap{ position:relative; width:800px; height:280px; background:#f2f2f2; margin:100px auto; overflow:hidden;}
    .pptWrap img{ display:block;}
    #ppt{ height:280px; display:block; position:absolute; left:0; top:0; width:800px;}
    #ppt li{ float:left;}
    .bot{ position:absolute; width:100%; height:30px; text-align:right; color:#000; bottom:0; left:0; z-index:100;}
    .bot a{display:inline-block; height:18px; width:18px; font-size:14px; color:#fff; text-align:center; line-height:18px; border:1px solid #f4f4f4; background:#6CF; margin:5px 10px 0 0; text-decoration:none;}
    .bot a.active{ border:1px solid #fff; color:#6CF; background:#FF9;}
    .bg{ opacity:0.5; background:#000; position:absolute; bottom:0; left:0; width:100%; height:30px; z-index:99;}
    </style>
    </head>
    <body>
    <div class="pptWrap" id="pptWrap">
            <ul id="ppt">
                <li><img src="images/01.jpg" /></li>
                <li><img src="images/02.jpg" /></li>
                <li><img src="images/03.jpg" /></li>
                <li><img src="images/04.jpg" /></li>
                <li><img src="images/05.jpg" /></li>
            </ul>
    </div>
    </body>
    </html>
    <script type="text/javascript">
    window.onload=function(){
        var now=0;
        var timer=null;
        var wrap=document.getElementById("pptWrap");
        var ppt=document.getElementById("ppt");
        var aLi=ppt.getElementsByTagName("li");
        var step=aLi[0].offsetWidth;
        var num=aLi.length;
        ppt.style.width=step*num+"px";
        var oDiv=document.createElement("div");
        var oDivbg=document.createElement("div");
        oDivbg.className="bg";
        wrap.appendChild(oDivbg)
        oDiv.className="bot";
        for(var i=0;i<aLi.length;i++){
            var aA=document.createElement("a");
            if(i==now){
                aA.className="active";
            }
            aA.innerHTML=i+1;
            aA.setAttribute("href","#");
            oDiv.appendChild(aA);
        }
        
        wrap.appendChild(oDiv)
        
        //生成按钮,且给按钮添加点击滚动效果
        var aa=wrap.getElementsByTagName("a");
        for(var i=0;i<num;i++){
            (function(n){
                aa[n].onmouseover=function(){            
                    for(var j=0;j<num;j++){
                        aa[j].className="";
                    }
                    now=n;
                    //alert(now)
                    aa[now].className="active";
                    move(ppt,-step*now);
                    
                }
            })(i)
        }
        
        //鼠标移上计时器关闭
        wrap.onmouseover=function(){
            clearInterval(timer);
        }
        
        //鼠标移开后计时器开启
        wrap.onmouseout=function(){
            timer=setInterval(function(){
            for(var j=0;j<num;j++){
                aa[j].className="";
            }
            aa[now].className="active";
            move(ppt,-step*now);
            now++;
            if(now==num){
                now=0;
            }
            
        },2000)
        }
        
        
        
        //默认鼠标移开
        wrap.onmouseout();
    
        //运动框架
        function move(obj,target){
            clearInterval(obj.timer);
            obj.timer=setInterval(function(){
                var cur=obj.offsetLeft;
                var speed=cur<target?Math.ceil((target-cur)/7):Math.floor((target-cur)/7);
                if(obj.offsetLeft!==target){
                    obj.style.left=obj.offsetLeft+speed+"px";
                }else{
                    clearInterval(obj.timer);
                }
            },30)
        }    
    }
    </script>
  • 相关阅读:
    postman Variables变量的详解与应用
    windows 快速设置环境变量工具 Rapid Environment Editor
    Redis 客户端工具
    python 安装 pymongo
    python ImportError:No module named 'PIL'
    linux 通过命令行终端去控制vnc终端【export DISPLAY使用方法】
    centos7 安装vnc-server 与卸载
    vagrant box centos7硬盘扩容【不删除原数据】
    vboxmanage不是内部或外部命令
    用docker搭建的nginx报upstream错误
  • 原文地址:https://www.cnblogs.com/busicu/p/3738109.html
Copyright © 2020-2023  润新知