微信小程序点击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 相关文章推荐
javascript中对对层的控制
Dec 29 Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
Dec 07 Javascript
jQuery scroll事件实现监控滚动条分页示例
Apr 04 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
常用jQuery代码分享
Jul 14 Javascript
jquery判断复选框是否选中进行答题提示特效
Dec 10 Javascript
JavaScript实现的CRC32函数示例
Nov 23 Javascript
JavaScript函数节流的两种写法
Apr 07 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 jQuery
JS实现把一个页面层数据传递到另一个页面的两种方式
Aug 13 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 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
基于mysql的bbs设计(五)
2006/10/09 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP chr()函数讲解
2019/02/11 PHP
laravel实现前后台路由分离的方法
2019/10/13 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
初学js 新节点的创建 删除 的步骤
2011/07/04 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
python删除过期文件的方法
2015/05/29 Python
Python学习入门之区块链详解
2017/07/25 Python
python入门教程 python入门神图一张
2018/03/05 Python
python 列表输出重复值以及对应的角标方法
2019/06/11 Python
Python学习笔记之迭代器和生成器用法实例详解
2019/08/08 Python
centos7之Python3.74安装教程
2019/08/15 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
求职意向书
2014/04/01 职场文书
小学兴趣小组活动总结
2014/07/07 职场文书
教师党员自我评价范文
2015/03/04 职场文书
Mysql案例刨析事务隔离级别
2021/09/25 MySQL
SQL中的三种去重方法小结
2021/11/01 SQL Server