微信小程序点击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 TextBox自动完成条
Jul 22 Javascript
javascript 面向对象全新理练之原型继承
Dec 03 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
js 浏览本地文件夹系统示例代码
Oct 24 Javascript
jQuery实现的Div窗口震动效果实例
Aug 07 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
Jul 09 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
vue根据值给予不同class的实例
Sep 29 Javascript
JS async 函数的含义和用法实例总结
Apr 08 Javascript
如何在面试中手写出javascript节流和防抖函数
Oct 22 Javascript
JavaScript实现登录窗体
Jun 22 Javascript
5种方法告诉你如何使JavaScript 代码库更干净
Sep 15 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
php更新修改excel中的内容实例代码
2014/02/26 PHP
php实现中文字符截取防乱码方法汇总
2015/04/29 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
2015/12/25 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
PHP实现的CURL非阻塞调用类
2018/07/26 PHP
php+mysql开发的最简单在线题库(在线做题系统)完整案例
2019/03/30 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
js left,right,mid函数
2008/06/10 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
JavaScript开发人员的10个关键习惯小结
2014/12/05 Javascript
浅谈javascript 迭代方法
2015/01/21 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
基于Vue实现微信小程序的图文编辑器
2018/07/25 Javascript
jQuery轮播图实例详解
2018/08/15 jQuery
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
Python Sleep休眠函数使用简单实例
2015/02/02 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Django Admin 实现外键过滤的方法
2017/09/29 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
pytorch多GPU并行运算的实现
2019/09/27 Python
Python解析微信dat文件的方法
2020/11/30 Python
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
开学典礼决心书
2014/03/11 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python
Python保存并浏览用户的历史记录
2022/04/29 Python