微信小程序点击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 相关文章推荐
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
js获取微信版本号的方法
May 12 Javascript
Bootstrap Metronic完全响应式管理模板之菜单栏学习笔记
Jul 08 Javascript
浅谈时钟的生成(js手写简洁代码)
Aug 20 Javascript
JavaScript 是什么意思
Sep 22 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 Javascript
深入理解React高阶组件
Sep 28 Javascript
Javascript实现时间倒计时功能
Nov 17 Javascript
JavaScript多种页面刷新方法小结
Apr 04 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
vue实现列表拖拽排序的示例代码
Apr 08 Vue.js
微信小程序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
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
Array of country list in PHP with Zend Framework
2011/10/17 PHP
php自动注册登录验证机制实现代码
2011/12/20 PHP
php var_export与var_dump 输出的不同
2013/08/09 PHP
PHP程序员不应该忽略的3点
2015/10/09 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
简单的php购物车代码
2020/06/05 PHP
javascript add event remove event
2008/04/07 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
Python 实现链表实例代码
2017/04/07 Python
在python中做正态性检验示例
2019/12/09 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
汽车检测与维修个人求职信
2013/09/24 职场文书
出纳岗位职责模板
2013/11/27 职场文书
毕业留言寄语大全
2014/04/10 职场文书
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
房屋买卖协议书范本
2014/09/27 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
会议主持人开场白台词
2015/05/28 职场文书
《司马光》教学反思
2016/02/22 职场文书