原生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 相关文章推荐
线路分流自动跳转代码;希望对大家有用!
Dec 02 Javascript
Egret引擎开发指南之运行项目
Sep 03 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
JavaScript实现点击文本自动定位到下拉框选中操作
Jun 15 Javascript
谈谈VUE种methods watch和compute的区别和联系
Aug 01 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
微信小程序module.exports模块化操作实例浅析
Dec 20 Javascript
ES6入门教程之Array.from()方法
Mar 23 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
Nov 07 Javascript
使用typescript改造koa开发框架的实现
Feb 04 Javascript
如何使用 vue-cli 创建模板项目
Nov 19 Vue.js
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中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
php动态生成函数示例
2014/03/21 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
Javascript 作用域使用说明
2009/08/13 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
jquery实现的省市区三级联动
2015/04/02 Javascript
js+html5实现canvas绘制圆形图案的方法
2015/06/05 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
图解JavaScript中的this关键字
2020/05/28 Javascript
Bootstrap模态框禁用空白处点击关闭
2016/10/20 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
Python中字符串对齐方法介绍
2015/05/21 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python冲顶大会 快来答题!
2018/01/17 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
python中if嵌套命令实例讲解
2021/02/25 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
心得体会怎么写
2013/12/30 职场文书
消防安全责任书范本
2014/04/15 职场文书
医德医风演讲稿
2014/05/20 职场文书
2015届本科毕业生自我鉴定
2014/09/27 职场文书
党员进社区活动总结
2015/05/07 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA