呼吸轮播图实现及问题解决方法

一、实现

     呼吸轮播相比于传统轮播,只是增加了渐变的效果,采用淡入淡出的方法,让图片切换时有一个动态的过程,提高用户体验。具体实现过程如下。
    1、为了实现淡入淡出的动画效果,首先我们需要引入之前封装的运动函数,代码如下:
 <script src="animate-2.0.1.js"></script>
  2、引入代码之后我们开始写轮播效果实现的代码,首先我们实现左右两个按钮点击切换图片的过程,代码:
oNext.onclick = function(){
     
  //函数节流,当图片在切换时,点击不会执行后面的代码
    if(imgLi[num].isanimated) return;

    animate(imgLi[num] , {"opacity":0} , 1000);         
        numLi[num].style.backgroundColor = "orange";
    if (num == 4)
    {
        num = -1;                                                   
        }
            
    num++;
    animate(imgLi[num] , {"opacity":1} , 1000)
    numLi[num].style.backgroundColor = "red";
}

oPrev.onclick = function(){

    if(imgLi[num].isanimated) return;
    animate(imgLi[num] , {"opacity":0} , 1000);
        numLi[num].style.backgroundColor = "orange";
        if (num == 0)
        {
            num = 5;                            
        }

        num--;

        animate(imgLi[num] , {"opacity":1} , 1000);
        numLi[num].style.backgroundColor = "red";
    } 
   在这段代码中我们实现了点击两边按钮切换图片的功能,为了实现淡入淡出的效果,我们需要让上一张图片淡入,当前图片淡出。我们定义了一个变量作为图片的下标,点击是进行自增或者自减。这里需要注意的是变量num变化代码的位置,必须在图片淡入和淡出代码之间,这样才能实现上一张图片淡入,当前图片淡出的效果。
   当点击的间隔时间快于运动函数传入的时间时,图片的切换会变得很乱,因此我们调用了运动函数中定义的isAnimate属性,当为true时,点击无效。

   2、接下来我们需要实现图片的自动切换,为了达到自动切换的效果,我们需要设置一个定时器,来实现代码的自动执行。具体实现如下:
var timer = setInterval(function(){

        if(imgLi[num].isanimated) return;

    animate(imgLi[num] , {"opacity":0} , 1000);
    numLi[num].style.backgroundColor = "orange";
    if (num == 4)
    {
        num = -1;                                           
    }
            
    num++;
    animate(imgLi[num] , {"opacity":1} , 1000)
    numLi[num].style.backgroundColor = "red";
}
oDiv.onmouseover = function(){
        
    clearInterval(timer);
}
oDiv.onmouseout = function(){
        
    timer = setInterval(function(){
        //move函数我们后面会封装,这里回了节省代码,先写上去       
        move();
    },2000)
}
  3、自动做切换的效果实现后,只需要实现点击下方原点切换到对应的图片,这个呼吸轮播就实现了。代码如下:
for (var i=0; i<numLi.length; i++)
    {
        numLi[i].index = i;

        numLi[i].onclick = function(){
                
            if(imgLi[num].isanimated) return;
            animate(imgLi[num] , {"opacity":0} , 1000);
            numLi[num].style.backgroundColor = "orange";

            num = this.index;
                
            animate(imgLi[num] , {"opacity":1} , 1000);
            numLi[num].style.backgroundColor = "red";
                
        }
    }
   在实现 下方小圆点的颜色切换时,我们平时可能用的比较多的是排他模型,先让所有的圆点都变成原始颜色,再让我们当前点击的圆点变色。在这里我们也可以使用将上一次点击的圆点变成原始颜色,当前点击的圆点变色的方式。

   4、重复代码的封装,完成上一步之后,我们整个呼吸轮播就写完了,但是上述的实现过程出现了大量的重复代码,这是我们就可以运用之前学习的函数知识,将重复的代码封装到一个函数之中,需要的时候调用函数就可以。
   function move(){
        
        if(imgLi[num].isanimated) return;

        animate(imgLi[num] , {"opacity":0} , 1000);
        numLi[num].style.backgroundColor = "orange";
        if (num == 4)
        {
            num = -1;                                           
        }
            
        num++;
        animate(imgLi[num] , {"opacity":1} , 1000)
        numLi[num].style.backgroundColor = "red";
    }
   这里我们将重复的代码封装在一个名为move的函数中,在程序代码中需要的地方可直接调用。

二、遇到的问题及解决方法

   在整个程序实现的过程中,我发现当点击速度过快时图片会乱,一开始我以为是当前图片显示时上一张图片还未隐藏所造成的,于是我将图片隐藏运动函数传入的时间参数设置为0,代码如下:
animate(imgLi[num] , {"opacity":0} , 0);
    numLi[num].style.backgroundColor = "orange";
    if (num == 4)
    {
        num = -1;                                           
    }
            
    num++;
    animate(imgLi[num] , {"opacity":1} , 1000)
   这样设置之后,点击速度过快确实不会再出现图片混乱的情况,但是当点击到最后一张图片时再点击不再切换。经过检查发现,时间设置为0时,运动函数并没有执行,造成每一张图片透明度都为1的情况。最后我调用了运动函数中提供的函数节流属性isAnimate属性解决了这个问题。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容