move.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. var sliderData = (function(cb){
  2. document.getElementById('slider').addEventListener('touchstart',touchstart, false);
  3. document.getElementById('slider').addEventListener('touchmove',touchmove, false);
  4. document.getElementById('slider').addEventListener('touchend',touchend, false);
  5. var pageDom = document.getElementsByClassName('page')[0];
  6. var rightEarDom = document.getElementsByClassName('right-ear')[0];
  7. var leftEarDom = document.getElementsByClassName('left-ear')[0];
  8. var scheduleChildLine = document.getElementsByClassName('schedule-child-line')[0];
  9. var width = document.documentElement.clientWidth - 50;
  10. var startX =0;
  11. var index = 0;
  12. var translateX = 0;
  13. var startTime;
  14. var newTranslateX;
  15. var distance = 0;
  16. var startTranslate;
  17. var isSlide = false;
  18. var sliderNumber = 4;//滑块是数量,控制溢出不能滑动
  19. function touchstart(e){
  20. startX = e.touches[0].clientX;
  21. startTime = new Date().getTime();
  22. startTranslate = translateX;
  23. isSlide = true;
  24. }
  25. function touchmove(e){
  26. if (!isSlide) return
  27. var currentX = e.touches[0].clientX
  28. //2端溢出不能滑动
  29. if (startTranslate == 0 && currentX > startX) return;
  30. if (Math.abs(startTranslate) == width * (sliderNumber - 1) && currentX < startX) return;
  31. // 向右滑动时, 没数据无法滑动
  32. if (currentX < startX) {
  33. }
  34. distance = currentX - startX;
  35. translateX = currentX - startX + startTranslate;
  36. document.getElementById("slider-list").style.transform = "translateX("+translateX+"px)"
  37. }
  38. function touchend(){
  39. if (!isSlide) return
  40. var duration = +new Date() - startTime
  41. if (translateX > startTranslate) {
  42. // 向左划
  43. if (distance > width / 3 || (distance > 40 && duration < 600)) {
  44. newTranslateX = startTranslate + width;
  45. } else {
  46. newTranslateX = startTranslate
  47. }
  48. console.log(cb)
  49. } else {
  50. // 向右划
  51. if (Math.abs(distance) > width / 3 || (Math.abs(distance) > 40 && duration < 600)) {
  52. newTranslateX = startTranslate - width;
  53. } else {
  54. newTranslateX = startTranslate
  55. }
  56. cb();
  57. }
  58. translateX = newTranslateX;
  59. isSlide = false;
  60. distance = 0;
  61. index = Math.abs(newTranslateX / width)
  62. document.getElementById("slider-list").style.transform = "translateX("+translateX+"px)"
  63. lineMove();
  64. }
  65. //点击左耳朵
  66. leftEarDom.addEventListener('click',() => {
  67. if (index == 0) return;
  68. startTranslate = translateX;
  69. newTranslateX = startTranslate + width;
  70. translateX = newTranslateX;
  71. document.getElementById("slider-list").style.transform = "translateX("+translateX+"px)"
  72. lineMove();
  73. })
  74. //点击右耳朵
  75. rightEarDom.addEventListener('click',() => {
  76. if (index === sliderNumber - 1) return;
  77. startTranslate = translateX;
  78. newTranslateX = startTranslate - width;
  79. translateX = newTranslateX;
  80. document.getElementById("slider-list").style.transform = "translateX("+translateX+"px)";
  81. lineMove();
  82. cb();
  83. })
  84. //下方进度条移动
  85. function lineMove(){
  86. index = Math.abs(newTranslateX / width);
  87. let oneSlider = 36/sliderNumber,
  88. transformSlider = oneSlider*index;
  89. scheduleChildLine.style.width = `${oneSlider}px`;
  90. scheduleChildLine.style.transform = `translateX(${transformSlider}px)`;
  91. pageDom.innerText = `${index + 1}/${sliderNumber}页`
  92. }
  93. })(getLists)