[ javascript ] 司徒正美的fadeOut-fadeIn效果!

首先感谢司徒正美的文章!

在司徒大神的博客看到一个简单的渐入渐出的效果,完全采用js实现。

如下:

<!doctype html>
<html dir="ltr" lang="zh-CN" >
    <head>
        <meta charset="utf-8"/>
        <meta http-equiv="X-UA-Compatible" content="IE=8">      
        <title>相册</title>
    </head>
    <body>
        <div id="album" >
            <img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/202906/t_type1.jpg" />
            <img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/202906/t_type2.jpg" />
            <img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/202906/t_type3.jpg" />
            <img src="http://images.cnblogs.com/cnblogs_com/rubylouvre/202906/t_type4.jpg" />
        </div>
        <style type="text/css">
            #album{
                position:relative;
                border:10px solid #000;
                width:85px;
                height:120px;
                overflow:hidden;
            }
            #album img{
                position:absolute;
                top:0;
                left:0;
                opacity:0;
                filter:alpha(opacity=0);
            }
        </style>
        <script type="text/javascript">
            var album = function(el){
                var node = (typeof el == "string")? document.getElementById(el):el;
                var images = node.getElementsByTagName("img");
                var length = images.length;
                for(var i=1;i<length;i++){
                    images[i].opacity = 0;//为所有图片设置一个自定义属性opacity
                } 
                images[0].opacity = 0.99;
                images[0].style.display = "block";
                var current = 0;
                (function(){
                    setTimeout(function(){
                        var cOpacity = images[current].opacity,
                            next = images[current+1]?current+1:0;//下一张图片的索引,如果没有就回到第一张
                        var nOpacity = images[next].opacity;
                        cOpacity-=.05;
                        nOpacity+=.05;
                        images[current].opacity = cOpacity;
                        images[next].opacity = nOpacity;
                        images[next].style.display = "block";//确保肯定有一张图片是可见的
                        setOpacity(images[current]);
                        setOpacity(images[next]);
                        if(cOpacity<=0) {
                            images[current].style.display = "none";
                            current = next;
                            setTimeout(arguments.callee,1000);
                        }else{
                            setTimeout(arguments.callee,50);
                        }
                    },100);
                })()
            }
            var setOpacity =function(obj) {
                if(obj.opacity>.99) {
                    obj.opacity = .99;
                }
                obj.style.opacity = obj.opacity;
                obj.style.filter = "alpha(opacity=" + (obj.opacity*100) + ")";
            }
            window.onload = function(){
                var el = document.getElementById("album");
                album(el);
            }
        </script>
        <p>请稍等4秒………………</p>
    </body>
</html>

我一直很明白,为什么这里的图片的效果一定需要等待4秒才会出现。于是,研究之,

发现,原来一切都是由于positon所造成的。由于定位是采用的absolute,所以导致了,最后一张图片会覆盖前面的图片。

那么在改变前面的图片的opacity的时候,所有的效果都会被最后的一张图给挡住.

如需要改变这种情况,只需要在初始化的时候,将所有的图的opacity都重置为0.

如下:

 #album img{
    position:absolute;
    top:0;
    left:0;
    opacity:0;
    filter:alpha(opacity=0);
  }

这样重置之后,发现这个世界又开始清静了。

总体来说效果还是蛮简单的。


是的,很多人会说,干嘛不用jquery,jquery可能就是一句话的问题。

对于这个,不做解释。


偶有所得,以记录之,谨防忘记!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值