今天来介绍一下我前两天写一个小任务的时候遇到的一些问题,如果能够有所帮助或者启发,那将是我的荣幸。

<div class="banner">

<a class="" href="#" target="_blank"><img src="data:images/newpic.gif"></a>
        <a class="" href="#" target="_blank"><img src="data:images/1.jpg"></a>
        <a class="" href="#" target="_blank"><img src="data:images/newpic.gif"></a>
        <a class="" href="#" target="_blank"><img src="data:images/1.jpg"></a>
        <a class="" href="#" target="_blank"><img src="data:images/newpic.gif"></a>
    </div>

要实现的功能是banner图的轮播

大致思路如下:

1. 将这些图片存放在一个数组里,然后把第一个图片显示出来,其他的隐藏。

2. 定义一个函数,用来显示下一张图片,即本张图片隐藏,下张图片显示。如果是最后一张,本张隐藏,第一张显示,这样实现循环播放。

3. 每隔一段时间调用一次这个函数。

$(function () {
    var pics = $(".banner a img");
    var len = pics.length;
    pics.eq(0).show();
    for (var i = 1; i < len; i++) {
        pics.eq(i).hide();
    }
    
    function turn(){
       
        if (i < 5) {
            if (pics.eq(i).not('hidden')) {
                pics.eq(i).hide();
                pics.eq(i + 1).show();
            }
            i++;
        }
        if (i == 5) {
            pics.eq(5).hide();
            pics.eq(0).show();
            i = 0;
        }
    }
    i = 0;
    setInterval(turn, 2000);
});

这里边有几个知识点需要总结一下:

1. 选择数组中某个元素,使用 arr.eq(i) 的方式,其中 i 为索引。

2. 判断元素是否显示,使用 not 选择器,可直接用于元素上,pics.eq(i).not('hidden') 就是选择 pics 数组中索引值为 i 且没有隐藏的元素。

3. 在这里没有在 turn 函数里使用 for 循环来操作是因为每隔一段时间 turn 函数都要执行一次,而 turn 函数每执行一次实际上只需要改变一张图片,如果使用 for 循环的话,每次执行 turn 函数都要执行一次 for 循环,都要遍历所有的元素,并且很容易造成混乱,不容易形成思路。

4. 在这里通过最下边 i = 0; 在第一次执行之前将 i 置零,意思是从第一张图片开始,每次操作完之后,i++,直到最后一张图片的时候,再次将 i 置零,循环重新开始。

5. setInterval(turn,2000); 第一个参数是函数名称,不需要写括号,也不要加引号,第二个参数是间隔时间,这里应该是2000毫秒,也就是2秒,可以根据实际需要设定。

知识的积累是一个漫长的过程,实践和经验也需要时间来沉淀。

04-26 22:56