原生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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
script的async属性以非阻塞的模式加载脚本
Jan 15 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
JavaScript+canvas实现七色板效果实例
Feb 18 Javascript
Web安全测试之XSS实例讲解
Aug 15 Javascript
纯js三维数组实现三级联动效果
Feb 07 Javascript
微信小程序 flex实现导航实例详解
Apr 26 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
AngularJS 打开新的标签页实现代码
Sep 07 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
Sep 07 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
Three.js实现简单3D房间布局
Dec 30 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面向对象全攻略 (九)访问类型
2009/09/30 PHP
PHP安全防范技巧分享
2011/11/03 PHP
php 保留字列表
2012/10/04 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
Js组件的一些写法
2010/09/10 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
浅析js预加载/延迟加载
2014/09/25 Javascript
详解原生JavaScript实现jQuery中AJAX处理的方法
2016/05/10 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
[03:44]2015国际邀请赛选手档案—Cloud9.NoTail
2015/07/28 DOTA
[59:08]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第一局
2016/02/27 DOTA
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
python实现跨文件全局变量的方法
2014/07/07 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
python 调用c语言函数的方法
2017/09/29 Python
Python实现正则表达式匹配任意的邮箱方法
2018/12/20 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
房产转让协议书
2014/04/11 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
反腐倡廉观后感
2015/06/08 职场文书
食堂管理制度范本
2015/08/04 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android