原生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 新节点的创建 删除 的步骤
Jul 04 Javascript
JavaScript数组常用操作技巧汇总
Nov 17 Javascript
javascript正则表达式基础知识入门
Apr 20 Javascript
异步安全加载javascript文件的方法
Jul 21 Javascript
javascript弹出拖动窗口
Aug 11 Javascript
js实现当前输入框高亮显示的方法
Aug 19 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
javascript 使用正则test( )第一次是 true,第二次是false
Feb 22 Javascript
vue.js获得当前元素的文字信息方法
Mar 09 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
javascript中join方法实例讲解
Feb 21 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
Oct 21 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
php zend 相对路径问题
2009/01/12 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
php _autoload自动加载类与机制分析
2012/02/10 PHP
php验证是否是md5编码的简单代码
2014/04/01 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP Hash算法:Times33算法代码实例
2015/05/13 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
php自动载入类用法实例分析
2016/06/24 PHP
Mootools 1.2教程 排序类和方法简介
2009/09/15 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery异步提交表单的两种方式
2016/09/13 Javascript
AngularJS 使用ng-repeat报错 [ngRepeat:dupes]
2017/01/19 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
浅谈vue2 单页面如何设置网页title
2017/11/08 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
angular动态表单制作
2018/02/23 Javascript
详解基于electron制作一个node压缩图片的桌面应用
2019/01/29 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
python字符串和常用数据结构知识总结
2019/05/21 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
编程实现当输入某产品代码则打印出该产品记录的功能
2014/05/03 面试题
机械专业毕业生推荐信范文
2013/11/25 职场文书
致200米运动员广播稿
2014/02/06 职场文书
班组长岗位职责
2014/03/03 职场文书
科技工作者先进事迹
2014/08/16 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang