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


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的滚动鼠标放大缩小图片效果
Oct 27 Javascript
document.all的一个比较完整的总结及案例
Jan 31 Javascript
调用HttpHanlder的几种返回方式小结
Dec 20 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
jQuery基于ajax实现带动画效果无刷新柱状图投票代码
Aug 10 Javascript
js实现黑色简易的滑动门网页tab选项卡效果
Aug 31 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
Apr 13 Javascript
js中console在一行内打印字符串和对象的方法
Sep 10 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
Feb 11 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 Javascript
JS实现判断移动端PC端功能
Feb 21 Javascript
在vue中配置不同的代理同时访问不同的后台操作
Sep 11 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
DC动漫人物排行
2020/03/03 欧美动漫
一条久听不愿放下的DIY森海MX500,三言两语话神奇
2021/03/02 无线电
php学习笔记(三)操作符与控制结构
2011/08/06 PHP
PHP 数组和字符串互相转换实现方法
2013/03/26 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
JavaScript常用基础知识强化学习
2015/12/09 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
jquery图片预览插件实现方法详解
2019/07/18 jQuery
uni app仿微信顶部导航条功能
2019/09/17 Javascript
JavaScript闭包原理与用法学习笔记
2020/05/29 Javascript
让python在hadoop上跑起来
2016/01/27 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
jupyter notebook实现显示行号
2020/04/13 Python
Python解析微信dat文件的方法
2020/11/30 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
The Hut德国站点:时装、家居用品、美容等
2016/09/23 全球购物
两道JAVA笔试题
2016/09/14 面试题
安全员岗位职责
2013/11/11 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
数控专业个人求职信范例
2013/11/29 职场文书
医学生自我评价
2014/01/27 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
单位租房协议书范本
2014/12/04 职场文书
学生党员检讨书范文
2014/12/27 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
运动会加油稿
2015/07/22 职场文书
Mysql 文件配置解析介绍
2022/05/06 MySQL