原生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写的异步加载js文件函数(支持数组传参)
Jun 07 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
Aug 28 Javascript
js实现字符串和数组之间相互转换操作
Jan 12 Javascript
js实现适配不同的屏幕大小
Apr 10 Javascript
Ionic3 UI组件之Gallery Modal详解
Jun 07 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
Jul 28 Javascript
Webpack中雪碧图插件使用详解
May 25 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
微信小程序滑动选择器的实现代码
Aug 10 Javascript
vue拖拽排序插件vuedraggable使用方法详解
Aug 21 Javascript
jQuery-ui插件sortable实现自由拖动排序
Dec 01 jQuery
easyUI使用分页过滤器对数据进行分页操作实例分析
Jun 01 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 Debugger 的安装教程
2009/09/25 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
php递归函数中使用return的注意事项
2014/01/17 PHP
php中文繁体和简体相互转换的方法
2015/03/21 PHP
编写PHP脚本来实现WordPress中评论分页的功能
2015/12/10 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
laravel 字段格式化 modle 字段类型转换方法
2019/09/30 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JQuery基础语法小结
2015/02/27 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
canvas知识总结
2017/01/25 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
vue-cli整合vuex的时候,修改actions和mutations,实现热部署的方法
2018/09/19 Javascript
Python素数检测的方法
2015/05/11 Python
Windows下Eclipse+PyDev配置Python+PyQt4开发环境
2016/05/17 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
python使用Flask操作mysql实现登录功能
2018/05/14 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
Django 外键的使用方法详解
2019/07/19 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
python清空命令行方式
2020/01/13 Python
python 爬取疫情数据的源码
2020/02/09 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
什么时候用assert
2015/05/08 面试题
大学毕业生工作的自我评价
2013/10/01 职场文书
军训考核自我鉴定
2014/02/13 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
建筑安全标语
2014/06/07 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
css3新特性的应用示例分析
2022/03/16 HTML / CSS