原生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 相关文章推荐
jQuery实现的类flash菜单效果代码
May 17 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
JsRender for index循环索引用法详解
Oct 31 Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 Javascript
JavaScript高级教程5.6之基本包装类型(详细)
Nov 23 Javascript
跟我学习javascript解决异步编程异常方案
Nov 23 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
JavaScript实现省市县三级级联特效
May 16 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
Vue 实现从小到大的横向滑动效果详解
Oct 16 Javascript
Vue实现多标签选择器
Nov 28 Javascript
Vue-cli assets SubDirectory及PublicPath区别详解
Aug 18 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获取windows登录用户名的方法
2014/06/24 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
Js 本页面传值实现代码
2009/05/17 Javascript
学习ExtJS border布局
2009/10/08 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
2020/06/28 Python
Python实现弹球小游戏
2020/08/01 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
澳大利亚最大的护发和护肤品购物网站:RY
2019/12/26 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
美国滑板店:Tactics
2020/11/08 全球购物
测试驱动开发的主要步骤是什么
2014/12/10 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
机关会计岗位职责
2014/04/08 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
法定代表人授权委托书
2014/09/19 职场文书
《草虫的村落》教学反思
2016/02/20 职场文书