move.js 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  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 = 651;
  10. var startX =0;
  11. var translateX = 0;
  12. var startTime;
  13. var newTranslateX;
  14. var distance = 0;
  15. var startTranslate;
  16. var isSlide = false;
  17. var SlideNumber = 1;
  18. function touchstart(e){
  19. startX = e.touches[0].clientX;
  20. startTime = new Date().getTime();
  21. startTranslate = translateX;
  22. isSlide = true;
  23. SlideNumber++;
  24. }
  25. function touchmove(e){
  26. if (!isSlide || sliderNumber == 0) 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/100+"rem)";
  37. }
  38. function touchend(){
  39. if (!isSlide || sliderNumber == 0) return
  40. if (SlideNumber>2 && Math.abs(distance) < 10){ //正在滑动 又开始滑动
  41. translateX = -(+width/100)*(parseInt(pageNum));
  42. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)";
  43. return
  44. }
  45. var duration = +new Date() - startTime
  46. if (translateX > startTranslate) {
  47. // 向左划
  48. if (distance > width / 3 || (distance > 40 && duration < 600)) {
  49. newTranslateX = startTranslate + width;
  50. } else {
  51. newTranslateX = startTranslate;
  52. }
  53. if(pageNum == Math.abs(newTranslateX / width) + 1){
  54. pageNum = Math.abs(newTranslateX / width) //解决cb中pageNum不是最新的
  55. cb();
  56. }
  57. } else {
  58. // 向右划
  59. if (Math.abs(distance) > width / 3 || (Math.abs(distance) > 40 && duration < 600)) {
  60. newTranslateX = startTranslate - width;
  61. document.getElementsByClassName("rest-tip")[0].innerText = `${translateX}`
  62. } else {
  63. newTranslateX = startTranslate;
  64. }
  65. if(pageNum == Math.abs(newTranslateX / width) - 1){
  66. pageNum = Math.abs(newTranslateX / width) //解决cb中pageNum不是最新的
  67. cb();
  68. }
  69. }
  70. translateX = newTranslateX;
  71. isSlide = false;
  72. distance = 0;
  73. pageNum = Math.abs(newTranslateX / width)
  74. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)"
  75. lineMove();
  76. SlideNumber = 1;
  77. }
  78. //点击左耳朵
  79. leftEarDom.addEventListener('click',() => {
  80. if (pageNum == 0) return;
  81. startTranslate = translateX;
  82. newTranslateX = startTranslate + width;
  83. translateX = newTranslateX;
  84. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)"
  85. lineMove();
  86. })
  87. //点击右耳朵
  88. rightEarDom.addEventListener('click',() => {
  89. if (pageNum === sliderNumber - 1) return;
  90. startTranslate = translateX;
  91. newTranslateX = startTranslate - width;
  92. translateX = newTranslateX;
  93. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)";
  94. lineMove();
  95. cb();
  96. })
  97. //下方进度条移动
  98. function lineMove(){
  99. pageNum = Math.abs(newTranslateX / width);
  100. let oneSlider = 36/sliderNumber,
  101. transformSlider = oneSlider*pageNum;
  102. scheduleChildLine.style.width = `${oneSlider}px`;
  103. scheduleChildLine.style.transform = `translateX(${transformSlider}px)`;
  104. pageDom.innerText = `${pageNum + 1}/${sliderNumber}页`
  105. }
  106. })(getLists)