move.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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 slideing = false;
  18. var SlideNumber = 1;
  19. function touchstart(e){
  20. startX = e.touches[0].clientX;
  21. startTime = new Date().getTime();
  22. startTranslate = translateX;
  23. isSlide = true;
  24. SlideNumber++;
  25. if(SlideNumber>2){
  26. if (translateX > startTranslate) {
  27. // 向左划
  28. if (distance > width / 3 || distance > 40) {
  29. newTranslateX = startTranslate + width;
  30. } else {
  31. newTranslateX = startTranslate
  32. }
  33. } else if(SlideNumber>2) {
  34. // 向右划
  35. if (Math.abs(distance) > width / 3 || Math.abs(distance) > 40) {
  36. newTranslateX = startTranslate - width;
  37. } else {
  38. newTranslateX = startTranslate
  39. }
  40. }
  41. SlideNumber = 1;
  42. translateX = newTranslateX;
  43. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)";
  44. }
  45. }
  46. function touchmove(e){
  47. if (!isSlide || sliderNumber == 0) return
  48. var currentX = e.touches[0].clientX
  49. //2端溢出不能滑动
  50. if (startTranslate == 0 && currentX > startX) return;
  51. if (Math.abs(startTranslate) == width * (sliderNumber - 1) && currentX < startX) return;
  52. // 向右滑动时, 没数据无法滑动
  53. if (currentX < startX) {
  54. }
  55. distance = currentX - startX;
  56. translateX = currentX - startX + startTranslate;
  57. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)";
  58. slideing = true;
  59. }
  60. function touchend(){
  61. if (slideing && SlideNumber>2) return //正在滑动 又开始滑动
  62. if (!isSlide || sliderNumber == 0) return
  63. var duration = +new Date() - startTime
  64. if (translateX > startTranslate) {
  65. // 向左划
  66. if (distance > width / 3 || (distance > 40 && duration < 600)) {
  67. newTranslateX = startTranslate + width;
  68. } else {
  69. newTranslateX = startTranslate
  70. }
  71. if(pageNum == Math.abs(newTranslateX / width) + 1){
  72. pageNum = Math.abs(newTranslateX / width) //解决cb中pageNum不是最新的
  73. cb();
  74. }
  75. } else {
  76. // 向右划
  77. if (Math.abs(distance) > width / 3 || (Math.abs(distance) > 40 && duration < 600)) {
  78. newTranslateX = startTranslate - width;
  79. } else {
  80. newTranslateX = startTranslate
  81. }
  82. if(pageNum == Math.abs(newTranslateX / width) - 1){
  83. pageNum = Math.abs(newTranslateX / width) //解决cb中pageNum不是最新的
  84. cb();
  85. }
  86. }
  87. translateX = newTranslateX;
  88. isSlide = false;
  89. distance = 0;
  90. pageNum = Math.abs(newTranslateX / width)
  91. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)"
  92. lineMove();
  93. slideing = false;
  94. SlideNumber = 1;
  95. }
  96. //点击左耳朵
  97. leftEarDom.addEventListener('click',() => {
  98. if (pageNum == 0) return;
  99. startTranslate = translateX;
  100. newTranslateX = startTranslate + width;
  101. translateX = newTranslateX;
  102. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)"
  103. lineMove();
  104. })
  105. //点击右耳朵
  106. rightEarDom.addEventListener('click',() => {
  107. if (pageNum === sliderNumber - 1) return;
  108. startTranslate = translateX;
  109. newTranslateX = startTranslate - width;
  110. translateX = newTranslateX;
  111. document.getElementById("slider-list").style.transform = "translateX("+translateX/100+"rem)";
  112. lineMove();
  113. cb();
  114. })
  115. //下方进度条移动
  116. function lineMove(){
  117. pageNum = Math.abs(newTranslateX / width);
  118. let oneSlider = 36/sliderNumber,
  119. transformSlider = oneSlider*pageNum;
  120. scheduleChildLine.style.width = `${oneSlider}px`;
  121. scheduleChildLine.style.transform = `translateX(${transformSlider}px)`;
  122. pageDom.innerText = `${pageNum + 1}/${sliderNumber}页`
  123. }
  124. })(getLists)