jQuery实现百叶窗及启发

1、百叶窗的简单思路及实现

百叶窗的实现思路主要是当鼠标移入到其中一张图,它两边的图片都会往两边收缩。左边第一张的left值为0px,第二张left为60px,如此一次加60px。右边的第一张left为740px,一次减60。假如我们移入的是第三张图片,那么运动应该为:

        $(".no2").mouseenter(function() {
            $("li").stop(true);         
            $(".no0").animate({"left": 0});
            $(".no1").animate({"left": 60});
            $(".no2").animate({"left": 120});
            $(".no3").animate({"left": 680});
            $(".no4").animate({"left": 740});
        })

那么我们要实现移入任意一张,其他的图片都发生运动的效果首先就需要获取所有的li,然后在对每一个li进行遍历,再将所有li的left值一一对应。由于当我们鼠标移入任意一个li的时候,所有li的left值并没有明显的可循的规律,所有我们可以将li可能具有的left值放在数组中,在遍历的时候一一对应。代码如下;

  $("li").mouseenter(function(){    
     //在动画运动之前先阻止其他动画
        $("li").stop(true);
     //保存鼠标移入的li的下标
        var i = $(this).index(); 
     //将我们移入图片左边li的可能left值保存在left数组中
        var left = [0,60,120,180,240];
     //将我们移入图片右边li的可能left值保存在right数组中
        var right = [0,560,620,680,740];    
     //遍历每一个li  
        $("li").each(function(j){               
           if(j<=i){                        
              $(this).animate({"left" : left[j]},500); 
            } 
            else{                       
            $(this).animate({"left" : right[j]},500);
            };                  
        });

这样我们百叶窗效果就完全实现了。

2、百叶窗对我的启发

虽然实现整个百叶窗效果所写的代码并不多,但整个实现过程还是给我带来了些许的启发。

1)、用数组保存左右两边li的left值的思想

在我们之前实现的一些效果(如:轮播图、无缝滚动),我们在遍历每一张图片时,他运动的值总是会有一定的规律,我们可以定义一个可以自增的整数将运动的值和这个整数关联起来。在我自己实现百叶窗效果的过程中,我也试图去寻找类似的关联,但是找了很久,都没有发现可遵循的规律。最后通过杰哥的讲解我了解到可以通过将li可能的left值保存在数组中,在遍历时通过数组下标和元素下标一一对应的方式来实现,具体代码如下:

       var left = [0,60,120,180,240];
       var right = [0,560,620,680,740];
       $("li").each(function(j){                
           if(j<=i){                        
              $(this).animate({"left" : left[j]},500); 
            } 
            else{                       
            $(this).animate({"left" : right[j]},500);
            };                  
        });
2)、函数节流和阻止动画

由于在整个效果中存在这运动函数,并且在鼠标切换过程中都会调用新的运动函数,因此当我们鼠标切换太过频繁时就会错乱,因此我们使用了函数节流和阻止动画的方式来避免这种情况。代码实现如下:

//函数节流
if($("div").is(":animated")){

        return ;
};
//阻止动画
$("div").stop(true);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • (续jQuery基础(1)) 第5章 DOM节点的复制与替换 (1)DOM拷贝clone() 克隆节点是DOM的常...
    凛0_0阅读 5,216评论 0 8
  • jQuery基础 什么是JQ?一个优秀的JS库,大型开发必备JQ的好处?一简化JS的复杂操作二不再需要关心兼容性三...
    幺七阅读 4,468评论 0 2
  • //------------------------- 第一章 认识JQuery ----------------...
    米塔塔阅读 4,068评论 0 9
  • 一、开营作业3个提问: 1.你期望在训练营收获什么? 我期望在这个训练营中 收获到成长!思想上、行动上的成长 ...
    栗子小咪阅读 1,371评论 1 1