原生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 相关文章推荐
javascript 通用loading动画效果实例代码
Jan 14 Javascript
jQuery中关于ScrollableGridPlugin.js(固定表头)插件的使用逐步解析
Jul 17 Javascript
Javascript毫秒数用法实例
Feb 05 Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 Javascript
jquery图片切换实例分析
Apr 15 Javascript
浅谈js中字符和数组一些基本算法题
Aug 15 Javascript
AngularJS+Bootstrap实现多文件上传与管理
Nov 08 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
详解vue-cli + webpack 多页面实例应用
Apr 25 Javascript
JavaScript代码执行的先后顺序问题
Oct 29 Javascript
微信小程序实现的picker多级联动功能示例
May 23 Javascript
微信小程序中的上拉、下拉菜单功能
Mar 13 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
如何删除多级目录
2006/10/09 PHP
解析PHP实现多进程并行执行脚本
2013/06/18 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
函数中使用require_once问题深入探讨 优雅的配置文件定义方法推荐
2014/07/02 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
2017/02/08 PHP
javascript仿qq界面的折叠菜单实现代码
2012/12/12 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
2014/05/13 Javascript
jquery+easeing实现仿flash的载入动画
2015/03/10 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
js转html实体的方法
2016/09/27 Javascript
纯JS实现轮播图
2017/02/22 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
AngularJS实现自定义指令与控制器数据交互的方法示例
2017/06/19 Javascript
原生js二级联动效果
2017/06/20 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python实现AES加密与解密
2019/03/28 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
python中利用numpy.array()实现俩个数值列表的对应相加方法
2019/08/26 Python
django-csrf使用和禁用方式
2020/03/13 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
英国电子产品购物网站:Tech in the basket
2019/11/08 全球购物
好员工观后感
2015/06/17 职场文书
用Python提取PDF表格的方法
2021/04/11 Python