scroll-view 实现自定义模块的横向滑动(到屏幕的中间显示)

news/2024/7/20 2:31:59 标签: js, javascript, 小程序

想要实现的功能是:一个横向的tab栏,点击item的时候,item自动滚动到屏幕的中间展示,有想过用vant的插件库来实现,但是那个不支持自定义内容,所以只好自己实现了。

效果图展示:
在这里插入图片描述
代码实现:
.wxml

<view class="container">
  <scroll-view id = "scroll-view" scroll-into-view="{{itemview}}" scroll-x class="scroll-x" scroll-left="{{scrollLeft}}"  scroll-with-animation="true" bindscroll="scrollMove">
  <view  wx:for="{{datalist}}" wx:key="index" class="view-parent">
    <view id="{{'item'+index}}"  bindtap="dianji" class="view-item{{selectItemIndex == index?'on':''}}" data-index="{{index}}">{{item.date}}</view>
  </view>
</scroll-view>

</view>

.wxss

/* pages/login/login.wxss */
.container {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%h;
}

.scroll-x{
  height:80px;
  white-space:nowrap;
  display:flex;
}
/* 隐藏scrollbar */
::-webkit-scrollbar{
  width: 0;
  height: 0;
  color: transparent;
}
.view-parent{
  display:inline-block;
}
.view-item{
  width:50px;
  height:50px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:12px;
  font-color:#222222;
  background:#80CBC4;
  margin:10px;
}
.view-itemon{
  width:70px;
  height:70px;
  display:flex;
  align-items:center;
  justify-content:center;
  font-size:12px;
  font-color:#222222;
  background:#80cb99;
  margin:10px;
}

.js

js">data: {
    scrollLeft: 0,
    selectItemIndex: 7,
    itemview: 'item7',
    value: '',
    datalist: [{
        date: "1",
        week: "日"
      },
      {
        date: "2",
        week: "六"
      },
      {
        date: "3",
        week: "五"
      },
      {
        date: "4",
        week: "四"
      },
      {
        date: "5",
        week: "一"
      },
      {
        date: "6",
        week: "二"
      },
      {
        date: "7",
        week: "三"
      },
      {
        date: "8",
        week: "三"
      },
      {
        date: "9",
        week: "三"
      },
      {
        date: "10",
        week: "三"
      },
      {
        date: "11",
        week: "三"
      },
      {
        date: "12",
        week: "三"
      },
      {
        date: "13",
        week: "三"
      },
      {
        date: "14",
        week: "三"
      },
      {
        date: "15",
        week: "三"
      },
    ],
  },
  dianji: function (event) {
    console.log(event)
    var itemid = event.target.id;
    var index = event.target.dataset.index;
    this.setData({
      selectItemIndex: index,
    })
    var ele = itemid
    this.getRect('#' + ele)
  },
  getRect: function (ele) {
    var that = this
    wx.createSelectorQuery().select(ele).boundingClientRect(function (rect) {
      console.log(JSON.stringify(rect))
      //获取屏幕的宽度的一半
      var screen = wx.getSystemInfoSync().windowWidth/2;
      //获取点击item的左边坐标
      var left = rect.left;
      //获取item的宽度de 一半
      var subhalfwidth= rect.width/2
      //需要scrollview 移动的距离是
      var juli = left-screen
      var zuizhongjuli = juli+subhalfwidth
      that.setData({
        scrollLeft:that.data.scrollLeft+=zuizhongjuli
      })
    }).exec()
  },
  
  scrollMove(e) {
    console.log(e)
    var scrollLeft = e.detail.scrollLeft;
    this.data.scrollLeft = scrollLeft
  },

实现的思路就是点击item的时候记录item左边的坐标和item的宽度,这样就可以计算出item滑动到屏幕的中间需要多少距离,然后去调用scroll-view的滑动方法就可以了,代码的重点展示:

js"> wx.createSelectorQuery().select(ele).boundingClientRect(function (rect) {
      console.log(JSON.stringify(rect))
      //获取屏幕的宽度的一半
      var screen = wx.getSystemInfoSync().windowWidth/2;
      //获取点击item的左边坐标
      var left = rect.left;
      //获取item的宽度de 一半
      var subhalfwidth= rect.width/2
      //需要scrollview 移动的距离是
      var juli = left-screen
      var zuizhongjuli = juli+subhalfwidth
      that.setData({
        scrollLeft:that.data.scrollLeft+=zuizhongjuli
      })
    }).exec()

http://www.niftyadmin.cn/n/1728125.html

相关文章

微信小程序 scroll-view 设置scroll-x 失效问题

想实现一个横向滑动的scrollview&#xff0c;以为直接给scroll-view设置 scroll-x 就能解决&#xff0c;结果失算了&#xff0c;先看代码 <scroll-view class"scroll" scroll-x"true"><view class"haibao_item" wx:for"{{item.rec…

如何使用Java进行Web应用的测试?

在Java中&#xff0c;有多种可以用于Web应用测试的工具和框架。以下是一些常用的方式&#xff1a; JUnit&#xff1a;JUnit是Java中最流行的单元测试框架之一。它可以用于编写单元测试用例&#xff0c;对Web应用的单个组件进行测试。通过模拟请求和响应对象&#xff0c;可以测试…

微信小程序开发工具初次使用Git 记录一下

微信开发工具版本号&#xff1a; 这里只是简单记录一下开发工具内的git使用。 首先是点击微信开发者工具内的版本管理&#xff08;如图&#xff09;&#xff1a; 会出现如下界面&#xff0c;然后点击初始化仓库&#xff0c;然后点击确定。 然后直接点击设置 去添加你的远…

微信小程序view、text换行

微信小程序之view,text换行 view换行&#xff1a;white-space:pre-line; text换行:word-break:break-all; 非学&#xff0c;无以致疑&#xff1b;非问&#xff0c;无以广识

文件删除rm后,df -h空间仍占用(df -h与du不一致问题)

df与du命令不一致问题 这几天因为电脑内存过小&#xff0c;需要去经常删文件&#xff0c;遇到了这个问题&#xff0c;即文件删除不释放空间得问题。我们通过df -h和du命令去查看空间。在进行文件删除时&#xff0c;会出现不一致得问题。用du查发现文件删除&#xff0c;用df查&…

hibench运行flink程序第三步run.sh出错(提交job失败)

在hibench上运行flink程序&#xff0c;提交job失败 hibench上做flink实验时&#xff0c;在新的服务器上重新配置环境后&#xff0c;在成功运行Hibench的前两步genSeedDataset.sh和dataGen.sh后&#xff0c;运行run.sh,正常提交&#xff0c;但生成metrics全部为0。 分析原因&am…

React生命周期的理解

前言&#xff1a; 在最初学习react的过程中&#xff0c;我对react的生命周期没有足够的重视&#xff0c;使得我在开发过程中遇到了很多问题。弄懂react的声明周期&#xff0c;可以让你的代码更加高效&#xff0c;更加优美。 什么是生命周期函数&#xff1f; 生命周期函数&am…

html标签集合

html标签汇总标签总结标签总结 标题标签 <h1>....</h1> <!-- 1级标题 --><h2>....</h2> <!-- 2级标题 --><h3>....</h3> <!-- 3级标题 --><h4>....</h4> <!-- 4级标题 --><h5>....</h5>…