论坛首页 Web前端技术论坛

模拟Google世界地球日的Doodle

浏览 9556 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-04-22   最后修改:2012-04-22

 

直接上代码吧。

 

CSS部分:

    #doodle {
      position: relative;
      margin-top: 35px;
      height: 182px;
      width: 468px; 
      overflow: hidden;
    }
    #doodle img{
      position:absolute;
      border:none;
      height:364px;
      left:0;
      top:0;
      width:468px
    }

 

HTML部分:

    <div id="doodle" title="世界地球日">
      <img src="image/a.jpg" id="_a">
      <img src="image/b.jpg" id="_b">
      <img src="image/b.jpg" id="_c">
    </div>

 

JavaScript部分:

    (function() {
        var divMain, imgA, imgB, imgC,
            timer={}, topMargin,  flag,
            
        //设置透明度
        setOpacityFn = function(dom, val) {
          if (dom) {
            dom.style.display = val > 0 ? 'block' : 'none';
            dom.style.filter = val < 100 ? 'alpha(opacity:' + val + ')' : ''; //IE
            val = (val < 100 ? val : 100) / 100;
            dom.style.opacity = val;  //W3C
            dom.style.MozOpacity = val; //Fx
          }
        },
        
        //清除定时器
        clearTimerFn = function() {
          window.clearTimeout(timer.show);
          window.clearTimeout(timer.grow);
        },
        
        //入口函数
        mainFn = function() {
          clearTimerFn();
          //初始化变量,获得dom引用等
          divMain = document.getElementById('doodle');
          imgA = document.getElementById('_a');
          imgB = document.getElementById('_b');
          imgC = document.getElementById('_c');
          topMargin = 0;
          flag = !1;
          if (divMain && imgA && imgB && imgC) { //占位用img
            var img = document.createElement('img');
            img.style.visibility = 'hidden';
            img.onload = imgOnloadFn;
            img.src = 'image/b.jpg';
            divMain.appendChild(img);  //执行onload事件
          }
        }, 
        imgOnloadFn = function() {
          clearTimerFn();
          imgB.style.height = imgC.style.height = '2912px';
          imgB.src = imgC.src = 'image/b.jpg';
          setOpacityFn(imgB, 0);
          setOpacityFn(imgC, 0);
          imgB.style.display = imgC.style.display = '';
          flowerGrowFn();
        },
        
        //花朵成长过程的每个图都是渐渐展现
        flowerShowFn = function(dom, val) {
          if (dom) {
            setOpacityFn(dom, val);
            if (val < 99)
              //每50ms透明度增加11,半秒内完全显示出来
              timer.show = window.setTimeout(function() {
                flowerShowFn(dom, val + 11);
              }, 50);
          }
        }, 
        //花朵生长过程
        flowerGrowFn = function() {
          var a = flag ? imgB : imgC, 
              b = flag ? imgC : imgB;
          a.style.zIndex = 4;
          b.style.zIndex = 3;
          window.clearTimeout(timer.show);
          flowerShowFn(a, 0);
          a.style.top = -topMargin + 'px';
          topMargin = Math.floor(topMargin + 182);
          //生长过程计时器
          timer.gow = topMargin < 2912 
                   ? window.setTimeout(flowerGrowFn, 500) 
                   : window.setTimeout(flowerFullbloomFn, 500);
          flag = !flag;
        }, 
        
        //完全开放,哦也~
        flowerFullbloomFn = function() {
          window.clearTimeout(timer.show);
          imgA.style.top = '-182px';
          imgA.style.zIndex = 5;
          flowerShowFn(imgA, 0);
        };
        
        mainFn();
    })();

 

 

  • 描述: demo
  • 大小: 180 KB
   发表时间:2012-04-23  
我对图像更感兴趣。
0 请登录后投票
   发表时间:2012-04-23  
唉,百度又抄袭啊,出了个什么2012世界末日大地震,草!
0 请登录后投票
   发表时间:2012-04-24  
楼主,我对你的头像更感兴趣
0 请登录后投票
   发表时间:2012-04-24  
LZ,我对你的头像更感兴趣~
0 请登录后投票
   发表时间:2012-04-24  
为啥会闪烁
0 请登录后投票
   发表时间:2012-04-24  
头像是你本人吗?是就求交往!
0 请登录后投票
   发表时间:2012-04-24  
popshadow 写道
LZ,我对你的头像更感兴趣~

+1
0 请登录后投票
   发表时间:2012-04-24  
能长这样 还做程序员
0 请登录后投票
   发表时间:2012-04-24  
yaolifei 写道
能长这样 还做程序员


+1
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics