App touch事件(滑动效果)

刺骨的言语ヽ痛彻心扉 2022-07-14 05:40 221阅读 0赞
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title></title>
  6. <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
  7. <style type="text/css">
  8. *{
  9. padding: 0;
  10. margin: 0;
  11. }
  12. .fa{
  13. height: 300px;
  14. width: 600px;;
  15. border: 1px solid red;
  16. margin: 0 auto;
  17. overflow: hidden;
  18. }
  19. ul{
  20. border: 2px solid black;
  21. width: 100px;
  22. height: 500px;
  23. }
  24. li{
  25. border: 1px solid blue;
  26. list-style: none;
  27. width: 100px;
  28. height: 50px;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div class="fa">
  34. <ul>
  35. <li>1</li>
  36. <li>2</li>
  37. <li>3</li>
  38. <li>4</li>
  39. <li>5</li>
  40. <li>6</li>
  41. <li>7</li>
  42. <li>8</li>
  43. <li>9</li>
  44. <li>10</li>
  45. </ul>
  46. </div>
  47. </body>
  48. <script>
  49. // 页面加载完毕事件
  50. window.onload = function () {
  51. // 左边的滑动效果
  52. left_scroll();
  53. }
  54. function left_scroll() {
  55. // 1获取 必要的元素节点
  56. // 获取移动的ul
  57. var moveUl = document.querySelector("ul");
  58. // ul父盒子的高度
  59. var parentHeight = document.querySelector(".fa").offsetHeight;
  60. // ul的高度
  61. var ulHeight = moveUl.offsetHeight;
  62. // 计算移动的范围 因为 往上移动个是 y负方向 所有 这里 是减去 而不是加
  63. var minDistance = parentHeight - ulHeight ;
  64. var maxDistance = 0;
  65. // 定义变量 用来 标示 吸附的距离
  66. var delayDistance = 150;
  67. // console.log('最小值'+minDistance);
  68. // console.log('最大值'+maxDistance);
  69. // 2.通过touch事件 修改 ul的移动
  70. // 定义一些变量 记录 距离
  71. // 起始值
  72. var startY = 0;
  73. // 移动值
  74. var moveY = 0;
  75. // 总的移动距离
  76. var distanceY = 0
  77. // 将 重复的代码 进行封装
  78. var startTransition = function () {
  79. moveUl.style.transition = 'all .5s';
  80. }
  81. var endTransition = function () {
  82. moveUl.style.transition = '';
  83. }
  84. var setTransform = function (distance) {
  85. moveUl.style.transform = 'translateY('+distance+'px)';
  86. }
  87. moveUl.addEventListener('touchstart',function(event){
  88. startY = event.touches[0].clientY;
  89. })
  90. moveUl.addEventListener('touchmove',function(event){
  91. moveY = event.touches[0].clientY - startY;
  92. // 判断 是否满足 移动的条件
  93. if ((moveY+distanceY)>(maxDistance+delayDistance)) {
  94. // 修正 moveY
  95. moveY = 0;
  96. distanceY = maxDistance+delayDistance;
  97. // 为什么是减法 因为 往上移动 是负值 要比最小值 还要更小
  98. }else if((moveY+distanceY)<(minDistance-delayDistance)){
  99. // 修改 moveY
  100. moveY = 0;
  101. distanceY = minDistance-delayDistance;
  102. }
  103. console.log(distanceY);
  104. // 关闭 过渡效果
  105. // moveUl.style.transition = '';
  106. endTransition();
  107. // 移动
  108. // moveUl.style.transform = 'translateY('+(moveY+distanceY)+'px)';
  109. setTransform(moveY+distanceY);
  110. })
  111. moveUl.addEventListener('touchend',function(event){
  112. // 修改移动的总距离
  113. distanceY+=moveY;
  114. // 吸附回去 判断 吸附的方位
  115. if (distanceY>maxDistance) {
  116. distanceY = maxDistance;
  117. }else if(distanceY<minDistance){
  118. distanceY = minDistance;
  119. }
  120. // 吸附回去
  121. // 移动
  122. // moveUl.style.transition ='all .5s';
  123. startTransition();
  124. // moveUl.style.transform = 'translateY('+(distanceY)+'px)';
  125. setTransform(distanceY);
  126. })
  127. }
  128. </script>
  129. </html>

发表评论

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

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

相关阅读

    相关 Touch事件分发

    Touch事件分发中只有两个主角:ViewGroup和View。Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGr