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~~

  • 相关阅读:
    activiti 任务节点 处理人设置【转】
    activiti 中的签收与委托 操作
    [转] shiro简单配置
    Angular-ui/bootstarp modal 主控制器与模态框控制器传值
    angular之$on、$emit、$broadcast
    AngularJs动态添加元素和删除元素
    angular.element
    angularJs的工具方法
    AngularJS $watch 监听
    AngularJs 延时器、计时器
  • 原文地址:https://www.cnblogs.com/lxin/p/2605087.html
Copyright © 2011-2022 走看看