zoukankan      html  css  js  c++  java
  • javascript淡入淡出的效果轮换转播后续

    今天在网上找了个例子 终于把这个困扰我几天的淡入淡出效果写出来了 自己在火狐和IE6下试了下 都没问题,一向我都不擅长写这些setTimeout和setInterval的例子,今天是参考了网上一个类似例子的做法,在原有基础上改动好了,不多说,先上代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title> fade in</title>
        <style>
        #out{width:600px; height:200px;margin:0 auto; border:1px solid #333; overflow:hidden}
        #out ul{margin:0; padding:0;position:relative;}
        #out li{list-style:none;float:left;position:absolute;}
        </style>
    </head>
    <body>
    <div id="out">
    <ul>
    <li><a href="javascript:void(0)"><img src="image/1.jpg" width="600" height="200"/></a></li>
    <li><a href="javascript:void(0)"><img src="image/2.jpg" width="600" height="200"/></a></li>
    <li><a href="javascript:void(0)"><img src="image/3.jpg" width="600" height="200"/></a></li>
    <li><a href="javascript:void(0)"><img src="image/4.jpg" width="600" height="200"/></a></li>
    </ul>
    </div>
    <ul >
    <li><a href="javascript:void(0);" onclick="showCertainImage(0)">0</a></li>
    <li><a href="javascript:void(0);" onclick="showCertainImage(1)">1</li>
    <li><a href="javascript:void(0);" onclick="showCertainImage(2)">2</a></li>
    <li><a href="javascript:void(0);" onclick="showCertainImage(3)">3</a></li>
    </ul>
    </body>
    <script>
        function Id(name){
            return document.getElementById(name);
        }    
        function setOpacity(ev, v){
            ev.filters ? ev.style.filter = 'alpha(opacity=' + v + ')' : ev.style.opacity = v / 100;
        }
            
        var out = Id("out");
        var li = out.getElementsByTagName('li');
        var len = li.length;
        
        for(var i=0; i<len; i++){
            li[i].style.zIndex = len-i;
        }
        
        function fadeIn(index){        
            var num = 100;
            var next = index+1;
            if(next== len){
                next = 0;            
            }
            for(var i=0; i<len; i++){  //参考网上例子 每次显示当前图片前 都将所有图片的z-index清空,只给当前图片和下一张图片设置z-index属性;
                li[i].style.zIndex = '';
            }
            li[index].style.zIndex = 2;    
            li[next].style.zIndex = 1;
            
            setOpacity(li[next], 100);        
            addTimer = setInterval(function(){
                if(num==0){
                    clearTimeout(addTimer);
                }
                setOpacity(li[index],num);
                num-=10;            
            },50);        
        }
        
        var current = 0;    
        function changeImage(c){    
            if(!c){
                c = current;
            }
            timer = setTimeout(function(){        
                if(c == len){ //一轮播放结束后,再次从头播放;
                    c = 0;
                }
                fadeIn(c); 
                c++; 
                
                changeImage(c);
            },3000)            
        }
        
        function showCertainImage(index){ //点击改变图片的入口;
            if(timer){
                clearTimeout(timer);
            }    
            var next = index+1;
            if(next == len){
                next = 0;            
            }
            for(var i=0; i<len; i++){
                li[i].style.zIndex = '';
            }
            li[index].style.zIndex = 2;            
            setOpacity(li[index], 100);
            
            changeImage(index);
        }    
        changeImage(); //自动轮播的入口;
    </script>
    </html>

    大致的解释我都写在代码里了,这次比上次改进的地方在于index属性,每次执行fadein 不管之前的index如何,全部置空,然后将需要淡入的图片放在最上面,next的图片放在下面设置为不透明,点击的时候,所有图片的zindex置空,然后将当前图片设置为不透明然后放在最上层,这样确实便捷了很多,不管之前的z-index如何,每次都这样设置。

    但这样的解决方案也有不妥,做不妥的是,每次执行当前前,首先是for循环置空,这个处理是否有些粗暴了呢~~,至少效率上是不高的。

    另 由于这个例子是为下一个工作中用的东西做demo,因此绑定事件啊 全局变量啊 等地方都没考虑,仅仅一个demo~~

  • 相关阅读:
    Ubuntu adb devices :???????????? no permissions (verify udev rules) 解决方法
    ubuntu 关闭显示器的命令
    ubuntu android studio kvm
    ubuntu 14.04版本更改文件夹背景色为草绿色
    ubuntu 创建桌面快捷方式
    Ubuntu 如何更改用户密码
    ubuntu 14.04 返回到经典桌面方法
    ubuntu 信使(iptux) 创建桌面快捷方式
    Eclipse failed to get the required ADT version number from the sdk
    Eclipse '<>' operator is not allowed for source level below 1.7
  • 原文地址:https://www.cnblogs.com/lxin/p/2605087.html
Copyright © 2011-2022 走看看