滚动鼠标/滑动触摸板 切换图片

r囧r小猫 2022-12-18 10:53 219阅读 0赞

1、滑动鼠标/触摸板时切换图片

1.1 最终效果
在这里插入图片描述
1.2 实现过程

  • 滑动鼠标时给img标签切换样式,从而实现突出显示的效果。
  • 鼠标/触摸板 向下滑动, 突出显示前一张图片
  • 鼠标/触摸板 向上滑动,突出显示下一张图片
  • 鼠标/触摸板滑动时,删除和添加class 实现,元素的突出显示。可设置一个index作为辅助标志。
  • 加上事件节流/防抖,控制事件的触发频率。

1.3 如何知道鼠标/触摸板是向下还是向上滑动

万能的网络,什么东西都可以搜索的到。。。。。js判断鼠标滑动方向

发生鼠标滚动事件/触摸屏滑动事件 时 通过event对象里wheelDelta或者detail值的正负来判断鼠标滚轮向上还是向下

  1. var scrollFunc = function(e) {
  2. var e = e || window.event;
  3. if(e.wheelDelta) {
  4. if(e.wheelDelta > 0) { //当鼠标滚轮向上滚动时
  5. alert("鼠标滚轮向上滚动");
  6. }
  7. if(e.wheelDelta < 0) { //当鼠标滚轮向下滚动时
  8. alert("鼠标滚轮向下滚动");
  9. }
  10. } else if(e.detail) {
  11. if(e.detail < 0) { //当鼠标滚轮向上滚动时
  12. alert("鼠标滚轮向上滚动");
  13. }
  14. if(e.detail > 0) { //当鼠标滚轮向下滚动时
  15. alert("鼠标滚轮向下滚动");
  16. }
  17. }
  18. }
  19. // 给页面绑定鼠标滚轮事件,针对火狐的非标准事件
  20. window.addEventListener("DOMMouseScroll", scrollFunc)
  21. // 给页面绑定鼠标滚轮事件,针对Google,mousewheel非标准事件已被弃用,请使用 wheel事件代替
  22. window.addEventListener("wheel", scrollFunc)
  23. // ie不支持wheel事件,若一定要兼容,可使用mousewheel
  24. window.addEventListener("mousewheel", scrollFunc)

1.4 完整代码 js部分

  1. var imgs = document.getElementsByClassName("img-container")[0].children;
  2. var container = document.getElementsByClassName("img-container")[0];
  3. var index = 0;
  4. for (let i = 0; i < imgs.length; i++) { // 根据class active-img 的添加情况,确定index的默认值,鼠标滚动/滑动触摸板时 好确定下一张图片的index
  5. if (imgs[i].getAttribute("id") === "active-img") {
  6. index = i;
  7. break;
  8. }
  9. }
  10. // 函数节流
  11. function thro(fn, delay) {
  12. var flag;
  13. return function () {
  14. if (!flag) {
  15. flag = true;
  16. fn();
  17. setTimeout(function () {
  18. flag = false;
  19. }, delay)
  20. }
  21. }
  22. }
  23. window.onmousewheel = thro(function (e) {
  24. var e = e || window.event;
  25. if (e.wheelDelta) {
  26. if (e.wheelDelta >= 0) {
  27. console.log("向上滚动") // 向上滚动时,突出显示后面的照片。。
  28. index++;
  29. if (index >= imgs.length) {
  30. index = 0;
  31. }
  32. switchClass(index);
  33. } else {
  34. console.log("向下滚动");// 突出显示前面的照片。。
  35. index--
  36. if (index == -1) {
  37. index = imgs.length - 1;
  38. }
  39. switchClass(index)
  40. }
  41. }
  42. }, 1000);
  43. function switchClass(index) {
  44. for (let i = 0; i < imgs.length; i++) {
  45. if (i == index) {
  46. imgs[i].setAttribute("id", "active-img");
  47. } else {
  48. imgs[i].setAttribute("id", "");
  49. }
  50. }
  51. }

2、让每个突出显示的图片始终在中间显示

题目解释:发生鼠标滚动事件/滑动触摸板的时候,突出显示的图片切换了,但是突出显示的图片始终位于这组图片的中间。

2.1 显现效果

在这里插入图片描述
2.2 基本思路

  • 这时,index的值是固定不变的
  • 每次发生鼠标滚动/触摸板滑动事件时,只是挪动图片的位置,始终给中间的图片添加active-img实现图片的突出显示
  • 突出显示下一张图片,将第一张图片删除,并追加到尾部
  • 突出显示上一张图片,将最后一张图片删除,塞入到最前面

2.3 代码部分

  1. if (e.wheelDelta) {
  2. if (e.wheelDelta >= 0) {
  3. console.log("向上滚动")
  4. var lastChild=container.lastElementChild;
  5. lastChild.setAttribute("id","");
  6. container.removeChild(lastChild);
  7. container.insertBefore(lastChild,container.firstElementChild)
  8. switchClass(2);
  9. } else {
  10. console.log("向下滚动");//
  11. // 找到第一个元素,将元素从第一个位置上删除,追加到尾部。
  12. var firstChild=container.firstElementChild;
  13. firstChild.setAttribute("id","")
  14. container.removeChild(firstChild);
  15. container.appendChild(firstChild);
  16. switchClass(2)
  17. }
  18. }

发表评论

表情:
评论列表 (有 0 条评论,219人围观)

还没有评论,来说两句吧...

相关阅读