微信小程序点击item使之滚动到屏幕中间位置


Posted in Javascript onMarch 25, 2020

1.需求

微信小程序点击item使之滚动到屏幕中间位置

想做类似猫眼电影选场次会自动滚动到屏幕中间的效果

如图是最终效果 

2.分析

实现这种效果的方法有三种:

1.直接使用原生CSS+js;

2.使用swiper,一屏显示多个item,点击item会自动滚动到中间

3.使用微信的scroll-view配合JS实现

权衡了一下最终选择了第三个方案,比较是微信自带的方法,使用起来会比较流畅,swiper的话会比较臃肿,原生的话就比较麻烦,需要考虑的兼容问题比较多。

3.代码

wxml

<view class="items-box">
  <scroll-view class="scroll-view_H" scroll-x="true" style="width: 100%" bindscroll="scrollMove" scroll-left='{{scrollLeft}}' scroll-with-animation="true">
  <view class="scroll-wrapper">
   <view id="scroll-item-{{index}}" class="item-pic {{selectItemIndex==index?'on':''}}" wx:for="{{ticketDetails}}" wx:key="index" bindtap="selectItem" data-index="{{index}}" data-name="{{item.TicketTitle}}" data-ticketid='{{item.TicketId}}'>
   <image src='{{imgUrl}}{{item.TicketPostImg}}'></image>
   </view>
  </view>
  </scroll-view>
</view>
<view class="item-name" hidden="{{!selectItemName}}">{{selectItemName}}</view>

wxss

.items-box .item-pic image {
 width: 90rpx;
 height: 120rpx;
}
 
.items-box .item-pic.on image {
 width: 110rpx;
 height: 148rpx;
 border: 4rpx solid #2bb7b3;
 box-sizing: border-box;
}
 
.items-box .item-pic {
 margin: 0 20rpx;
}
.items-box .item-pic:first-child{
 padding-left: 300rpx
}
.items-box .item-pic:last-child{
 padding-right: 300rpx
}
.item-name {
 padding: 18rpx 0;
 background-color: #fff;
 font-size: 24rpx;
 font-weight: 500;
 color: #232324;
 text-align: center;
}
 
.items-box .scroll-wrapper {
 align-items: flex-end;
 padding: 32rpx 0 0 0;
}
 
.items-box .scroll-view_H {
 border: none;
 background-color: #edeff1;
}

js

data:{
 moveParams: {
  scrollLeft: 0
 }
} 
 
getRect(ele) { 
//获取点击元素的信息,ele为传入的id
 var that = this;
 //节点查询
 wx.createSelectorQuery().select(ele).boundingClientRect(function (rect) {
  console.log(rect)
  let moveParams = that.data.moveParams;
  moveParams.subLeft = rect.left;
  moveParams.subHalfWidth = rect.width / 2;
  that.moveTo();
 }).exec()
 },
 moveTo: function () {
 let subLeft = this.data.moveParams.subLeft;
 let screenHalfWidth = this.data.moveParams.screenHalfWidth;
 let subHalfWidth = this.data.moveParams.subHalfWidth;
 let scrollLeft = this.data.moveParams.scrollLeft;
 
 let distance = subLeft - screenHalfWidth + subHalfWidth;
 
 scrollLeft = scrollLeft + distance;
 
 this.setData({
  scrollLeft: scrollLeft
 })
 },
 scrollMove(e) {
 let moveParams = this.data.moveParams;
 moveParams.scrollLeft = e.detail.scrollLeft;
 this.setData({
  moveParams: moveParams
 })
 },
 //选择项目
 selectItem: function (e) {
 let ele = 'scroll-item-' + e.currentTarget.dataset.index
 this.getRect('#' + ele);
 },

首先获取屏幕的宽度,再获取点击元素的宽度,计算一下就可以获得应该滚动的距离,再更改scroll-left='{{scrollLeft}}'即可

微信获取元素宽高的方法

wx.createSelectorQuery().select(ele).boundingClientRect(function (rect) {

}).exec()

https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createSelectorQuery.html

总结

到此这篇关于微信小程序点击item使之滚动到屏幕中间的文章就介绍到这了,更多相关微信小程序item滚动到屏幕中间内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery 研究心得 取得属性的值
Nov 30 Javascript
jQuery与其它库冲突的解决方法
Jun 25 Javascript
javaScript arguments 对象使用介绍
Oct 18 Javascript
js定时器(执行一次、重复执行)
Mar 07 Javascript
改变状态栏文字的js代码
Jun 13 Javascript
javascript创建对象、对象继承的实用方式详解
Mar 08 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
Nov 10 Javascript
javascript实现留言板功能
Feb 08 Javascript
JavaScript arguments.callee作用及替换方案详解
Sep 02 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
Nov 02 Javascript
微信小程序scroll-view点击项自动居中效果的实现
Mar 25 #Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
Mar 24 #Javascript
安装多版本Vue-CLI的实现方法
Mar 24 #Javascript
js实现页面图片消除效果
Mar 24 #Javascript
js实现消灭星星(web简易版)
Mar 24 #Javascript
JavaScript实现移动端带transition动画的轮播效果
Mar 24 #Javascript
javascript实现滚动条效果
Mar 24 #Javascript
You might like
使用apache模块rewrite_module (转)
2007/02/14 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
php使用pdo连接mssql server数据库实例
2014/12/25 PHP
关于php中一些字符串总结
2016/05/05 PHP
PHP生成制作验证码的简单实例
2016/06/12 PHP
laravel5.5添加echarts实现画图功能的方法
2019/10/09 PHP
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
jQuery实现鼠标划过添加和删除class的方法
2015/06/26 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
微信小程序 自定义Toast实例代码
2017/06/12 Javascript
vue.js+element-ui动态配置菜单的实例
2018/09/07 Javascript
React 实现车牌键盘的示例代码
2019/12/20 Javascript
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
如何提高python 中for循环的效率
2020/04/15 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
测试驱动开发的主要步骤是什么
2014/12/10 面试题
医学院四年学习生活的自我评价
2013/11/06 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
广告艺术设计专业自荐书
2014/07/08 职场文书
民族学专业大学生职业规划范文:清晰未来的构想
2014/09/20 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
行风评议整改报告
2014/11/06 职场文书
三年级学生期末评语
2014/12/26 职场文书
写给老师的保证书
2015/05/09 职场文书
心灵捕手观后感
2015/06/02 职场文书
python中的3种定义类方法
2021/11/27 Python
golang使用map实现去除重复数组
2022/04/14 Golang
Python 文字识别
2022/05/11 Python