当前位置:   article > 正文

uniapp 基于scroll-view商品分类锚点定位_uniapp使用scroll-into-view实现锚点定位和滚动监听功能

uniapp使用scroll-into-view实现锚点定位和滚动监听功能

如上图、需要实现商品分类中切换商品类型,右边定位到对应分类中并且右边分类下滑加载更多。

其中利用到的是uniapp中的scroll-view组件,利用组件中 scroll-into-view 的属性绑定元素id。

页面分为左右部分,左边部分循环出分类列表,在每一个分类上定义自定义属性(唯一),点击分类的时候,将自定义属性,赋值给我们定义的viewid,并且将viewid和scroll-into-view绑定。

右边也是循环出来的不同分类列表,此时对应循环出来内容盒子也需要进行id的绑定!!!

  1. const viewid = ref('cont0')
  2. function getType(e) {
  3. viewid.value = "cont" + e.currentTarget.dataset.index
  4. console.log(viewid.value);
  5. }
  1. css
  2. .category-box {
  3. width: 97%;
  4. height: 68vh;
  5. display: flex;
  6. justify-content: space-between;
  7. .left-box {
  8. width: 25%;
  9. height: 100%;
  10. background-color: #fff;
  11. >view {
  12. height: 88rpx;
  13. line-height: 88rpx;
  14. text-align: center;
  15. font-weight: 400;
  16. font-size: 32rpx;
  17. color: #333333;
  18. }
  19. .ac-type {
  20. background: #FFF3F5;
  21. font-weight: 700;
  22. font-size: 32rpx;
  23. color: #C32019;
  24. }
  25. }
  26. .right-box {
  27. width: 72%;
  28. height: 100%;
  29. }
  30. }
  31. .scroll {
  32. height: 65vh;
  33. }
  34. .goods-items {
  35. .goods-items-img {
  36. width: 100%;
  37. height: 176rpx;
  38. background-color: pink;
  39. }
  40. .scroll-box {
  41. display: grid;
  42. grid-template-columns: repeat(2, 1fr); //表示分为2列 1fr表示平均分配 第二个参数可以给定一个确定的宽度值
  43. column-gap: 30rpx; //设置每列之间的间隔为30rpx
  44. row-gap: 30rpx; //设置行间隔为30rpx
  45. margin-top: 20rpx;
  46. width: 100%;
  47. .goods-item {
  48. background: #FFFFFF;
  49. box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(255, 231, 218, 0.4);
  50. border-radius: 16rpx;
  51. margin-bottom: 34rpx;
  52. >image {
  53. width: 250rpx;
  54. height: 220rpx;
  55. }
  56. .des-text {
  57. margin: 16rpx;
  58. font-weight: 400;
  59. font-size: 24rpx;
  60. color: #333333;
  61. overflow: hidden;
  62. -webkit-line-clamp: 2;
  63. text-overflow: ellipsis;
  64. display: -webkit-box;
  65. -webkit-box-orient: vertical;
  66. }
  67. .sell {
  68. padding: 0 16rpx;
  69. font-weight: 400;
  70. font-size: 18rpx;
  71. color: #666666;
  72. }
  73. .pro-count {
  74. color: #D90000;
  75. font-size: 32rpx;
  76. padding: 0 16rpx;
  77. margin-bottom: 24rpx;
  78. display: flex;
  79. justify-content: space-between;
  80. align-items: center;
  81. >image {
  82. width: 32rpx;
  83. height: 32rpx;
  84. }
  85. }
  86. }
  87. }
  88. }
  89. .select-box {
  90. display: flex;
  91. justify-content: space-between;
  92. padding: 0 24rpx;
  93. margin-bottom: 24rpx;
  94. .ac-item {
  95. width: 122rpx;
  96. height: 50rpx;
  97. text-align: center;
  98. line-height: 50rpx;
  99. background: linear-gradient(180deg, #FF9257 0%, #D71100 100%);
  100. border-radius: 8rpx;
  101. font-weight: 400;
  102. font-size: 24rpx;
  103. color: #FFFFFF;
  104. }
  105. .normal-item {
  106. width: 122rpx;
  107. height: 50rpx;
  108. text-align: center;
  109. line-height: 50rpx;
  110. background: #FFE7DA;
  111. border-radius: 8rpx;
  112. font-weight: 400;
  113. font-size: 24rpx;
  114. color: #666666;
  115. }
  116. }
  1. html
  2. <view class="category-box">
  3. <view class="left-box">
  4. <view class="" v-for="(item,index) in category" :key="index" :data-index="index" @click="getType">
  5. {{item.type}}
  6. </view>
  7. </view>
  8. <view class="right-box">
  9. <scroll-view scroll-y class="scroll" :scroll-into-view="viewid" scroll-with-animation>
  10. <view v-for="(item,index) in category" :key="index">
  11. <view id="cont{{index}}">
  12. <view class="goods-items">
  13. {{item.type}}
  14. <image src="" mode="" class="goods-items-img"></image>
  15. <u-tabs :activeStyle="{
  16. color: '#BF0300',
  17. }" :inactiveStyle="{
  18. color: '#333333',
  19. }" lineColor="#F5F5F5" lineWidth="0" :list="selectMenu" @click="click"></u-tabs>
  20. <view class="scroll-box">
  21. <view class="goods-item" v-for="number of 3">
  22. <image src="../../../static/icon/logo.png" mode=""></image>
  23. <view class="des-text">
  24. 多数都是的的似的是的数都但是大多数都是的的似的是的数都是的的似的是的
  25. </view>
  26. <view class="sell">
  27. 已售:5000+
  28. </view>
  29. <view class="pro-count">
  30. <view class="">
  31. <text>xxx</text>
  32. <text style="font-size: 20rpx;margin-left: 8rpx;">积分</text>
  33. </view>
  34. <image src="../../../static/mall/add.png" mode=""></image>
  35. </view>
  36. </view>
  37. </view>
  38. </view>
  39. </view>
  40. </view>
  41. </scroll-view>
  42. </view>
  43. </view>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/779410
推荐阅读
相关标签
  

闽ICP备14008679号