微信小程序点击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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
javascript实例分享---具有立体效果的图片特效
Jun 08 Javascript
jQuery实现统计输入文字个数的方法
Mar 11 Javascript
JavaScript中使用sencha gridpanel 编辑单元格、改变单元格颜色
Nov 26 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
Oct 26 Javascript
jQuery读取XML文件的方法示例
Feb 03 Javascript
深入探究node之Transform
Jul 20 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
AngularJS实现的自定义过滤器简单示例
Feb 02 Javascript
inquirer.js一个用户与命令行交互的工具详解
May 18 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
Oct 28 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
PHP 实例化类的一点摘记
2008/03/23 PHP
PHP无敌近乎加密方式!
2010/07/17 PHP
Thinkphp模板中使用自定义函数的方法
2012/09/23 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
php根据操作系统转换文件名大小写的方法
2014/02/24 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
jQuery创建插件的代码分析
2011/04/14 Javascript
Json序列化和反序列化方法解析
2013/12/19 Javascript
JavaScript 作用域链解析
2014/11/13 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
Node.js环境下JavaScript实现单链表与双链表结构
2016/06/12 Javascript
脚本div实现拖放功能(两种)
2017/02/13 Javascript
JavaScript使用ZeroClipboard操作剪切板
2017/05/10 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
vue实现商城购物车功能
2017/11/27 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
react MPA 多页配置详解
2019/10/18 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
在Django的通用视图中处理Context的方法
2015/07/21 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
基于python实现聊天室程序
2018/07/27 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Python3 max()函数基础用法
2019/02/19 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
办加油卡单位介绍信
2014/01/09 职场文书
浙大毕业生自荐信
2014/01/26 职场文书
煤矿安全生产标语
2014/06/06 职场文书
老兵退伍标语
2014/10/07 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android