- JavaScript实战-JavaScript、jQuery、HTML5、Node.js实例大全(第2版)
- 张泽娜
- 613字
- 2025-02-24 19:10:52
3.3 响应鼠标动作
图3-2的效果已经有了,需要鼠标来操作展示想看的照片,这就需要在相应的地方加上事件。
3.3.1 响应小照片单击动作
前面的【范例3-3】里提供了显示小图列表的eg.showThumb()方法,在单击小图片时要显示大图片,这需要调用eg.showBig()方法,只有在单击小图片的时候响应单击事件才行,所以需要用eg.addListener()方法来实现,具体代码见【范例3-4】。
【范例3-4 响应小照片单击动作】
1. eg.showThumb = function(group){ 2. var ul = eg.$("smallPhotosList"); 3. ul.innerHTML = ''; //每次显示时要清空旧的内容 4. var start = (group-1)*eg.groupSize; //计算需要的data数据的开始位置 5. var end = group*eg.groupSize //计算需要的data数据的结束位置 6. for(var i=start; (i<end&&i<eg.data.length); i++){ 7. var li = document.createElement("li"); 8. li.innerHTML ='<img src = "'+eg.data[i][1]+'"id="thumb'+i+ '"width ="80" height="40"/>'; 9. (function(i){ 10. eg.addListener(li, "click", function(){ //增加click 事件监听 11. eg.showNumber = i; //记录选中的图标序号,供其他函数调用 12. eg.showBig(); 13. }); 14. })(i); //将i 作为值传递进去 15. ul.appendChild(li); 16. } 17. }; 18. eg.showBig = function(){ //根据某个编号显示大图 19. eg.$("bigPhotoSrc").src = eg.$("thumb"+eg.showNumber).src. replace("thumb", "photo"); 20. };
【范例3-4】中第9行就是响应小照片单击动作的代码,这里使用了一个闭包,即一个自调用的匿名函数。(function(){})()是最简单的闭包。大括号中的内容会顺序执行。如果去掉第9行和第14行的代码,会发现始终显示当前组照片中的最后一张,在for循环体里一般要用闭包把变量值传到内部的绑定事件里。
3.3.2 响应小照片上一组或下一组单击动作
响应小照片上一组或下一组单击动作的代码如【范例3-5】所示。
【范例3-5 响应小照片上一组或下一组单击动作】
1. eg.init = function(){ 2. eg.showThumb(1); //初始化要显示的 3. eg.addListener(eg.$("next"), "click", function(){ 4. eg.nextThumb(); 5. }); 6. eg.addListener(eg.$("prve"), "click", function(){ 7. eg.prveThumb(); 8. }); 9. }; 10. eg.nextThumb = function(){ //显示下一组小图列表 11. if((eg.groupNumber*eg.groupSize) +1 <= eg.data.length){ 12. eg.showThumb(eg.groupNumber+1); 13. eg.showNumber = eg.groupNumber*eg.groupSize; 14. eg.showBig(); 15. eg.groupNumber++; 16. } 17. }; 18. eg.prveThumb = function(){ //显示上一组小图列表 19. if(eg.groupNumber - 1>=1){ 20. eg.showThumb(eg.groupNumber-1); 21. eg.groupNumber--; 22. eg.showNumber = eg.groupNumber*eg.groupSize-eg.groupSize; 23. eg.showBig(); 24. } 25. };
eg.prveThumb和eg.nextThumb分别是上一组和下一组的逻辑控制函数。写好这两个函数后,还要将eg.init绑定到鼠标事件onclick上。