原生js实现百叶窗效果及原理介绍

 更新时间:2016年04月12日 14:43:15   作者:白超华  
这篇文章主要介绍了原生javascript实现百叶窗效果的方法及原理介绍,感兴趣的小伙伴们可以参考一下

百叶窗大家都见过吧!如图:

原理:

如图所示,空心格子就好比是每个li,给它设定相对定位属性,设置overflow:hidden;黑块为li子元素,高度为li的2倍,设置absolute属性,我们正是要改变它的top值从而获得变化!(右上角多余块与本图无关)

布局分析:

注意top值得变化!默认top=0时候,显示的“一楼上铺”,当top=-40px时候,li的子元素 上移40px,这时候显示的内容就为“一楼下铺”注意p元素的包裹层div

JS分析:
1、要开多个定时器来达到效果
2、执行相反方向
3、执行多组运动
4、累加产生错落感
5、产生时间间隔的动画
JS代码如下:

<script>
  window.onload = function(){
   var oUl = document.getElementById('ul1');
   var oUl2 = document.getElementById('ul2');

   toShow(oUl);
   //每四秒执行一次
   setTimeout(function(){
    toShow(oUl2);     
   },4000); 
   function toShow(obj){
    var aDiv = obj.getElementsByTagName('div');
    var iNow = 0;
    var timer = null;
    var bBtn = true;

    setInterval(function(){   
     toChange(); 
    },2000);
    function toChange(){
     timer = setInterval(function(){
      if(iNow==aDiv.length){
       clearInterval(timer);
       iNow = 0;
       bBtn = !bBtn;
      }
      else if(bBtn){
       startMove(aDiv[iNow],{top:0},function(){
        var p = document.getElementsByClassName('p-2');
        for(var i=0; i<p.length;i++){
         p[i].style.background = 'red';
        }
       });
       iNow++;
      }
      else{
       startMove(aDiv[iNow],{top:-30});
       iNow++;
      }     
     },100);     
    }    
   }   
  };
       //运动框架
  function startMove(obj,json,endFn){ 
   clearInterval(obj.timer);  
   obj.timer = setInterval(function(){   
    var bBtn = true;   
    for(var attr in json){    
     var iCur = 0;   
      iCur = parseInt(getStyle(obj,attr)) || 0;
     var iSpeed = (json[attr] - iCur)/8;
      iSpeed = iSpeed >0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);

     if(iCur!=json[attr]){
      bBtn = false;
     }
     obj.style[attr] = iCur + iSpeed + 'px';    
    }   
    if(bBtn){
     clearInterval(obj.timer);
     if(endFn){
      endFn.call(obj);
     }
    }
   },30); 
  }
        //获取非行间样式
  function getStyle(obj,attr){
   if(obj.currentStyle){
    return obj.currentStyle[attr];
   }
   else{
    return getComputedStyle(obj,false)[attr];
   }
  }
 </script>

下载地址:js实现百叶窗效果
以上就是本文的全部内容,希望对大家学习实现js百叶窗效果有所帮助。

相关文章

  • js前端实现图片懒加载(lazyload)的两种方式

    js前端实现图片懒加载(lazyload)的两种方式

    本篇文章主要介绍了js前端实现图片懒加载(lazyload)的两种方式 ,使用图片懒加载可以提高网页运行速度,有兴趣的可以了解一下。
    2017-04-04
  • 微信小程序如何访问公众号文章

    微信小程序如何访问公众号文章

    这篇文章主要介绍了微信小程序如何访问公众号文章,随着小程序不断的发展,现在个人的小程序也开放了很多功能了,个人小程序直接打开公众号链接。在群里看到的一款小程序,点击可以直接阅读文章了,需要的朋友可以参考下
    2019-07-07
  • Javascript函数式编程语言

    Javascript函数式编程语言

    JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本文专门介绍JavaScript函数式编程的特性。
    2015-10-10
  • 写了几个类,希望对大家有用。

    写了几个类,希望对大家有用。

    写了几个类,希望对大家有用。...
    2006-12-12
  • JS更改select内option属性的方法

    JS更改select内option属性的方法

    这篇文章主要介绍了JS更改select内option属性的方法,涉及JavaScript动态操作页面select元素属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • js控制TR的显示隐藏

    js控制TR的显示隐藏

    在很多现实的场景中,有的文本框我们希望在选择“是”的按钮之后才出现,这就需要js控制TR的隐藏和显示,如何控制,本文为大家揭晓
    2016-03-03
  • js实现网页换肤

    js实现网页换肤

    这篇文章主要为大家详细介绍了js实现网页换肤功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Bootstrap精简教程中秋大放送

    Bootstrap精简教程中秋大放送

    Bootstrap精简教程中秋大放送,这篇文章主要为大家分享了最基础的Bootstrap学习教程,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • JS中的JSON对象的定义和取值实现代码

    JS中的JSON对象的定义和取值实现代码

    这篇文章主要介绍了JS中的JSON对象的定义和取值实现代码,也是json的入门知识,需要的朋友可以参考下
    2018-05-05
  • JS发起HTTP请求的多种方式总结

    JS发起HTTP请求的多种方式总结

    这篇文章主要为大家详细介绍了JavaScript发起HTTP请求的多种方式,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11

最新评论