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


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 相关文章推荐
动态加载iframe
Jun 16 Javascript
javascript编程起步(第六课)
Jan 10 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
jQuery实现防止提交按钮被双击的方法
Mar 24 Javascript
JS给Textarea文本框添加行号的方法
Aug 20 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
原生js编写2048小游戏
Mar 17 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
Jul 13 Javascript
vue实现商品加减计算总价的实例代码
Aug 12 Javascript
深入理解Vue 的钩子函数
Sep 05 Javascript
小程序实现人脸识别功能(百度ai)
Dec 23 Javascript
js实现网页随机验证码
Oct 19 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实现网站留言板功能
2015/11/04 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
javascript中json对象json数组json字符串互转及取值方法
2017/04/19 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
在layui中select更改后生效的方法
2019/09/05 Javascript
详解利用eventemitter2实现Vue组件通信
2019/11/04 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
[02:42]DOTA2英雄基础教程 杰奇洛
2013/12/23 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python中创建二维数组
2018/10/17 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
2020/01/08 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
Emporio Armani腕表天猫官方旗舰店:乔治·阿玛尼为年轻人设计的副线品牌
2017/07/02 全球购物
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
中文系师范生自荐信
2013/10/01 职场文书
收银员岗位职责
2014/02/07 职场文书
档案室主任岗位职责
2014/02/12 职场文书
自荐信如何制作?
2014/02/21 职场文书
中学生励志演讲稿
2014/04/26 职场文书
建设工地安全标语
2014/06/07 职场文书
销售提升方案
2014/06/07 职场文书
三提三创主题教育活动查摆整改措施
2014/10/25 职场文书
党校党性分析材料
2014/12/19 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
导游词之安徽醉翁亭
2020/01/10 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python