原生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传参数受特殊字符影响错误的解决方法
Oct 21 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
Aug 04 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
Aug 26 Javascript
JavaScript各类型的关系图解
Oct 16 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
javascript 中的try catch应用总结
Apr 01 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
ztree实现左边动态生成树右边为内容详情功能
Nov 03 Javascript
vue transition 在子组件中失效的解决
Nov 12 Javascript
解决Can't find variable: SockJS vue项目的问题
Sep 22 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 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调用Oracle存储过程
2006/10/09 PHP
详解:――如何将图片储存在数据库里
2006/12/05 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
应用开发中涉及到的css和php笔记分享
2011/08/02 PHP
ThinkPHP3.1新特性之对页面压缩输出的支持
2014/06/19 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
关于PHP5.6+版本“No input file specified”问题的解决
2019/12/11 PHP
HTML上传控件取消选择
2013/03/06 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
干货分享:让你分分钟学会javascript闭包
2015/12/25 Javascript
javascript HTML5文件上传FileReader API
2020/03/27 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
深入理解Webpack 中路径的配置
2017/06/17 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
[01:25:33]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第二场 12.20
2020/12/23 DOTA
详解Python中的变量及其命名和打印
2016/03/11 Python
最大K个数问题的Python版解法总结
2016/06/16 Python
在Python程序员面试中被问的最多的10道题
2017/12/05 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
使用python获取(宜宾市地震信息)地震信息
2019/06/20 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
利用Python将多张图片合成视频的实现
2020/11/23 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
怎么处理XML的中文问题
2015/03/26 面试题
教师师德师风个人整改方案
2014/09/18 职场文书
怎样写辞职信
2015/02/27 职场文书
六一晚会主持词开场白
2015/05/28 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
javascript canvas实现雨滴效果
2021/06/09 Javascript
Python+pyaudio实现音频控制示例详解
2022/07/23 Python