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


Posted in Javascript onApril 12, 2016

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

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

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

原理:

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

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

布局分析:

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

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

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

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百叶窗效果有所帮助。

Javascript 相关文章推荐
js调试系列 源码定位与调试[基础篇]
Jun 18 Javascript
JavaScript 闭包详细介绍
Sep 28 Javascript
node.js实现博客小爬虫的实例代码
Oct 08 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
Dec 28 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
webpack学习教程之前端性能优化总结
Dec 05 Javascript
webpack多入口文件页面打包配置详解
Jan 09 Javascript
node puppeteer(headless chrome)实现网站登录
May 09 Javascript
mpvue构建小程序的方法(步骤+地址)
May 22 Javascript
微信小程序冒泡事件及其阻止方法实例分析
Dec 06 Javascript
js实现盒子滚动动画效果
Aug 09 Javascript
用javascript制作qq注册动态页面
Apr 14 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
Apr 12 #Javascript
jquery中实现时间戳与日期相互转换
Apr 12 #Javascript
Angular.js与Bootstrap相结合实现表格分页代码
Apr 12 #Javascript
JS代码防止SQL注入的方法(超简单)
Apr 12 #Javascript
zTree插件下拉树使用入门教程
Apr 11 #Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
Apr 11 #Javascript
js创建jsonArray传输至后台及后台全面解析
Apr 11 #Javascript
You might like
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JavaScript中的依赖注入详解
2015/03/18 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
angular ng-click防止重复提交实例
2017/06/16 Javascript
jQuery事件_动力节点Java学院整理
2017/07/05 jQuery
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python实现汉诺塔算法
2021/03/01 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
Python中字符串List按照长度排序
2019/07/01 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
汽车技术服务与营销专业在籍生自荐信
2013/09/28 职场文书
法律七进实施方案
2014/03/15 职场文书
文案策划求职信
2014/03/18 职场文书
网络优化专员求职信
2014/05/04 职场文书
关于青春的演讲稿
2014/05/05 职场文书
先进个人推荐材料
2014/12/29 职场文书
业务员辞职信范文
2015/03/02 职场文书
小型婚礼主持词
2015/06/30 职场文书
小学感恩主题班会
2015/08/12 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
pandas 实现将NaN转换为None
2021/05/14 Python
十大经典日本动漫排行榜 海贼王第三,犬夜叉仅第八
2022/03/18 日漫