小程序scroll-view 点击函数 滚动到指定元素

 <view style="margin-top: 40rpx;" >
        <scroll-view class="home-icon" :scroll-left="scrollLeft" scroll-x="true"     ref="scroll" style="white-space: nowrap" @scroll="onScroll">
        <view id="move">
          <block v-for="(item,index) in priceList.price" :key="index">
            <view :id="'item-' + index" class="min-icon">
              <text>¥{{ item.money }}</text>
              <image :src="priceList.img_url" alt="" class="icon-image" />
            </view>
          </block>
        </view>
      </scroll-view>
    </view>
 
 onScroll(e) {
      this.initialScrollLeft = e.target.scrollLeft;  
    },

    //点击滚动
    handlerMoney(item,index) {
      if(item.cardNum == 0){
        item.cardNum++
        //总卡数
      this.totalCard = this.priceList.price.reduce((total, val) => total + val.cardNum, 0);
      
      // 计算总金额
      this.totalMoney = this.priceList.price.reduce((total, val) => total + val.cardNum * val.money, 0);  
    
      //去除小数点 this.totalMoney = this.priceList.price.reduce((total, val) => total + Math.floor(val.cardNum * val.money), 0);
      }
      this.selected.push(index);
      this.selected= [...new Set([...this.selected, index])]
      // const selectedIndex = this.selected.indexOf(index);
      // if (selectedIndex > -1) {
      //   this.selected.splice(selectedIndex, 1);
      // } else {
      //   this.selected.push(index);
      // }

          this.currentId = index;  //用于来定位元素 
          var that = this;  
          if (!this.animation) {
            this.animation = true;
            uni.createSelectorQuery().select(`#item-${index}`).boundingClientRect(rect => {
              const windowWidth = uni.getSystemInfoSync().windowWidth;
              const scrollLeft = rect.left - windowWidth / 2 + rect.width / 2;
              let targetScrollLeft = this.initialScrollLeft + scrollLeft;

              let interval = setInterval(() => {
                if (Math.abs(targetScrollLeft - that.scrollLeft) <= 1) {
                  that.scrollLeft = targetScrollLeft;
                  clearInterval(interval);
                  interval = null;
                  this.animation = false; // 动画结束,修改 animation状态
                } else {
                  that.scrollLeft += (targetScrollLeft - that.scrollLeft) * 0.1;
                }
              }, 10);
            }).exec();
          }
    },


这一块是最主要的    


.home-icon {
height: 100%;
width: 100%;
overflow-x: scroll;
white-space: nowrap;
}

.min-icon {
display: inline-block;
height: 370rpx;
margin-left: 12rpx;
margin-right: 12rpx;
position: relative;
}


.icon-image {
width: 640rpx; 
height: 400rpx; 
}


.min-icon text:nth-child(1){
color: #fff;
font-size: 60rpx;
position: absolute;
top: 40rpx;
right: 50rpx;
font-weight: 600;
}

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-05-09 08:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-09 08:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-09 08:48:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-09 08:48:01       20 阅读

热门阅读

  1. Mysql 数据库 开发规范

    2024-05-09 08:48:01       11 阅读
  2. docker安装etcd和etcd客户端

    2024-05-09 08:48:01       10 阅读
  3. 从零手写实现 tomcat-04-请求和响应的抽象

    2024-05-09 08:48:01       13 阅读
  4. 网站服务器出现404情况

    2024-05-09 08:48:01       14 阅读
  5. 【贪心算法】活动安排问题Python实现

    2024-05-09 08:48:01       10 阅读
  6. libhv http client vs cpr

    2024-05-09 08:48:01       11 阅读
  7. 【2】STM32·FreeRTOS·任务创建和删除

    2024-05-09 08:48:01       6 阅读
  8. 前端WebSocket

    2024-05-09 08:48:01       10 阅读
  9. web后端——netbeans ide +jsp+servlet开发学习总结

    2024-05-09 08:48:01       10 阅读
  10. MAC创建Pytorch环境

    2024-05-09 08:48:01       11 阅读