百叶窗大家都见过吧!如图:
原理:
布局分析:
JS分析:
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>