0
点赞
收藏
分享

微信扫一扫

案例代码

完整的 JavaScript 代码如下:

<script type="text/javascript">

//得到所有元素

//左按钮

var leftBtn = document.getElementById("leftBtn");

//右按钮

var rightBtn = document.getElementById("rightBtn");

//图片列表

var oLis = document.getElementById("smallCarousel").getElementsByTagName("li");

//信号量

var idx = 0;

//事件监听,右按钮

rightBtn.onclick = function(){

//先更改信号量

idx++;

if(idx > oLis.length - 1){

idx = 0;

}

//切换图片

changePic();

}

//事件监听,左按钮

leftBtn.onclick = function(){

//先更改信号量

idx--;

if(idx < 0){

idx = oLis.length - 1;

}

//切换图片

changePic();

}

//更改图片函数

function changePic(){

//去掉所有 li 的 cur 类

for(var i = 0 ; i < oLis.length ; i++){

oLis[i].className = "";

}

//给当前信号量的 li 标签增加 cur 类

oLis[idx].className = "cur";

}

</script>

看一下程序的细节:

程序主要由两个按钮的事件监听、更改图片函数组成。可以看出,不管我们点击哪个按钮,都是先更改信号

量,然后再调用更改图片函数让 li 标签的 cur 类进行切换。这就是信号量的编程思维,“DOM 未动,信号先行”,

不要着急改变 li 标签,而是先改变信号量。

由于是轮播,即当图片到最后一张时,再次点击右按钮即可回到第 1 章图片,所以按钮的事件处理函数中,

有对信号量进行“验收”的 if 语句:

idx++;

if(idx > oLis.length - 1){

idx = 0;

}

最后一个 li 的下标是 oLis.length - 1,为什么要减 1 呢?因为数组的下标是从 0 开始开始数的,最后

一个 li 的下标一定是 li 总数减 1。当信号量的值大于这个值时,要将信号量重置为 0。

我们再看一下用来更改图片显示的函数:

//更改图片显示的函数

function changePic(){

//去掉所有 li 的 cur 类

for(var i = 0 ; i < oLis.length ; i++){

oLis[i].className = "";

}

//给当前信号量的 li 标签增加 cur 类

oLis[idx].className = "cur";

}

这个函数使用了“排他算法”:先使用循环语句去掉所有 li 标签的 cur 类,然后再单独给当前信号量的 li

标签增加 cur 类。这种算法思维是非常常见的。


举报

相关推荐

0 条评论