当前位置:   article > 正文

小程序 onPageScroll监听滚动结束_taro 监听页面滚动

taro 监听页面滚动

需求:当用户滑动页面的时候切换品牌的页签缩退,当用户停止滑动的时候页签展示完全

HTML代码:

  1. <!-- OnePlus/OPPO的切换 -->
  2. <view
  3. v-if="currentBrand === 'onePlus'"
  4. class="oppo-arrow"
  5. :class="scrollIng ? 'hide' : ''"
  6. @click="changeBrand('oppo')"
  7. >
  8. <view class="img-back">
  9. <view class="semi-circle"></view>
  10. <view class="square"></view>
  11. </view>
  12. <image src="../../static/oppo-logo-brand.png" mode="widthFix" class="img-brand"></image>
  13. </view>
  14. <view
  15. v-if="currentBrand === 'oppo'"
  16. class="onePlus-arrow"
  17. :class="scrollIng ? 'hide' : ''"
  18. @click="changeBrand('onePlus')"
  19. >
  20. <view class="img-back">
  21. <view class="semi-circle"></view>
  22. <view class="square"></view>
  23. </view>
  24. <image src="../../static/oneplusLogo.png" mode="widthFix" class="img-brand"></image>
  25. </view>

 css样式:使用了transition过渡属性,以达到动画的效果

  1. .oppo-arrow {
  2. position: fixed;
  3. right: 0;
  4. bottom: 100rpx;
  5. width: 108rpx;
  6. height: 96rpx;
  7. transition: right 0.5s ease-out; // 伸缩的动态效果
  8. z-index: 100;
  9. }
  10. .oppo-arrow.hide {
  11. right: -72rpx;
  12. }
  13. .onePlus-arrow {
  14. position: fixed;
  15. right: 0;
  16. bottom: 100rpx;
  17. width: 108rpx;
  18. height: 96rpx;
  19. transition: right 0.5s ease-out; // 伸缩的动态效果
  20. z-index: 100;
  21. }
  22. .onePlus-arrow.hide {
  23. right: -72rpx;
  24. }
  25. .oppo-arrow,
  26. .onePlus-arrow {
  27. .img-back {
  28. display: flex;
  29. position: absolute;
  30. left: 0;
  31. width: 108rpx;
  32. height: 96rpx;
  33. background: #ffffff;
  34. border: 0.6px solid rgba(0, 0, 0, 0.06);
  35. box-sizing: border-box;
  36. box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.12);
  37. border-radius: 48rpx 0 0 48rpx;
  38. .semi-circle {
  39. width: 48rpx;
  40. height: 96rpx;
  41. border-radius: 96rpx 0 0 96rpx;
  42. background-color: #fff;
  43. }
  44. .square {
  45. width: 60rpx;
  46. height: 96rpx;
  47. background-color: #fff;
  48. }
  49. }
  50. .img-brand {
  51. position: absolute;
  52. left: 12rpx;
  53. top: 12rpx;
  54. width: 72rpx;
  55. }
  56. }

js代码:把钩子函数onPageScroll封装成自执行闭包函数,同时使用了防抖

  1. // 小程序的钩子函数
  2. onPageScroll: (function () {
  3. let timer = null;
  4. return function (e) {
  5. console.log("在滚动");
  6. // 监听页面的滚动开始和结束
  7. clearTimeout(timer);
  8. this.scrollIng = true;
  9. timer = setTimeout(() => {
  10. console.log("滚动结束");
  11. this.scrollIng = false;
  12. }, 500);
  13. this.scrollTop = e.scrollTop;
  14. };
  15. })(),

这里最初代码是这样写的(没有使用自执行函数)

  1. data(){
  2. return {
  3. timer:null
  4. }
  5. }
  6. onPageScroll() {
  7. this.scrollTop = e.scrollTop;
  8. console.log("在滚动");
  9. // 监听页面的滚动开始和结束
  10. clearTimeout(timer);
  11. this.scrollIng = true;
  12. timer = setTimeout(() => {
  13. console.log("滚动结束");
  14. this.scrollIng = false;
  15. }, 500);
  16. };
  17. }

这么写的时候,发现有错乱的情况,滚动和滚动结束的执行都很奇怪,最后猜测可能是钩子函数onPageScroll的自身问题。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/275038
推荐阅读
相关标签
  

闽ICP备14008679号