微信小程序实现左右联动的实战记录


Posted in Javascript onJuly 05, 2018

前言

最近在学习小程序,实现了左右联动的功能,记录一下思绪,方便以后参考。

最终的界面如下, 点击左边任意一个项目,右边会跳到相应项目的起始位置,右边滑动,左则会跳到相应的位置。

微信小程序实现左右联动的实战记录

微信小程序实现左右联动的实战记录 

实现思路

在这里,右则每一项的高度都是固定的,方便定位当前滑动距离在哪一个大项(左则)里。右则的 scroll-view 使用了一项关键的属性:scroll-into-view,这个属性用来确定 scrollTop 的值的,当 scroll-into-view 的值和 scroll-view 里面的元素的id的值相等时,scroll-view 会定位到该元素,scrollTop 的值就是滑动到该元素的值。

做这个功能的时候,遇到一个问题,就是右则的小项种类不多的时候,例如某个类目只有1~2个,那么点击左则的大项的时候,会出现点击不到的现象。这里可以用点小技巧来解决:

点击左则大项的时候,设置当前点击标记为true,设置 classifySeleted 为当前点击的项目。 然后在滑动触发函数(onGoodsScroll)里面,判断当前触发滑动是否点击产生的,如果是,则不设置 classifySeleted  的值,否则就计算 classifySeleted 的值并设置。

示例代码:

wxml代码如下:

<view class="content-container">
  <scroll-view class="classify-container" scroll-y="true">
   <view class="classify {{classifySeleted==classify.typeId?'active':''}}" wx:for="{{cakeTypes}}" wx:for-item="classify" wx:key="id" data-id="{{classify.typeId}}" bindtap="tapClassify">
    <view class="name">{{classify.typeName}}</view>
   </view>
  </scroll-view>
  <scroll-view class="goods-container" scroll-y="true" scroll-into-view="{{'inToView' + typeIndex}}" bindscroll="onGoodsScroll" scroll-top="{{scrollTop}}">
   <view wx:for="{{cakeTypes}}" wx:for-item="classify" wx:key="id">
    <view class="title" id="{{'inToView'+classify.typeId}}">{{classify.typeName}}</view>
    <view class="goods" wx:for="{{classify.productIds}}" wx:for-item="cake" wx:key="id">
     <image class="pic" src="{{cake.imgSrc}}" data-src="{{cake.imgSrc}}" data-list="{{cake.imgSrc}}" bindtap="tapImg"></image>
     <view class="name ellipsis">{{cake.name}}</view>
     <view class="sold">{{cake.introduce}}</view>
     <view class="price">¥{{cake.price}}</view>
    </view>
   </view>
  </scroll-view>
 </view>

js代码如下:

onGoodsScroll: function (e) {

 var scrollTop = e.detail.scrollTop;
 var h = 0;
 var classifySeleted = this.data.classifySeleted;
 var titleHeight = Math.ceil(70 * this.data.percent);
 var itemHeight = Math.ceil(180 * this.data.percent);

 this.data.cakeTypes.forEach(function (classify, i) {
  console.log("h:" + h + " scrollTop:" + scrollTop);
  var _h = titleHeight + classify.productIds.length * itemHeight; 
  if (scrollTop >= h - 10) {
  classifySeleted = classify.typeId;
  }
  h += _h;
 });

 if (this.data.isTap) {
  this.setData ({
  isTap: false
  })
 } else {
  this.setData({
   classifySeleted: classifySeleted
  }); 
 } 
 },

 tapClassify: function (e) {
 var id = e.target.dataset.id;
 this.setData({
  isTap: true,
  classifySeleted: id,
  typeIndex: id
 });
 },

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JQuery动态给table添加、删除行 改进版
Jan 19 Javascript
深入理解JavaScript是如何实现继承的
Dec 12 Javascript
EasyUi datagrid 实现表格分页
Feb 10 Javascript
jQuery自动添加表单项的方法
Jul 13 Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
Aug 02 Javascript
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
vue页面加载闪烁问题的解决方法
Mar 28 Javascript
JS实现的透明度渐变动画效果示例
Apr 28 Javascript
mock.js实现模拟生成假数据功能示例
Jan 15 Javascript
vue 左滑删除功能的示例代码
Jan 28 Javascript
微信小程序仿淘宝热搜词在搜索框中轮播功能
Jan 21 Javascript
vue实现自定义多选与单选的答题功能
Jul 05 #Javascript
JavaScript实现图片懒加载的方法分析
Jul 05 #Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
Jul 05 #Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 #Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 #Javascript
vue两个组件间值的传递或修改方式
Jul 04 #Javascript
jQuery实现炫丽的3d旋转星空效果
Jul 04 #jQuery
You might like
php在页面中调用fckeditor编辑器的方法
2011/06/10 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
PHP中使用正则表达式提取中文实现笔记
2015/01/20 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
JSF中confirm弹出框的用法示例介绍
2014/01/07 Javascript
js function定义函数的几种不错方法
2014/02/27 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
[01:38]2018DOTA2亚洲邀请赛主赛事第二日现场采访 神秘商人痛陈生计不易
2018/04/05 DOTA
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
田径运动会通讯稿
2014/09/13 职场文书
如何写贫困证明申请书
2014/10/29 职场文书
公司表扬信格式
2015/05/04 职场文书
建国大业观后感800字
2015/06/01 职场文书
《搭石》教学反思
2016/02/18 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript