微信小程序点单左右联动的效果实现

news2024/12/23 18:05:17

微信小程序点单左右联动的效果实现
在这里插入图片描述
原理解析:
  点击左边标签会跳到右边相应位置:点击改变rightCur值,转跳相应位置滑动右边,左边标签会跳到相应的位置:监听并且设置每个右边元素的top和bottom,再判断当前滑动高度在那个元素之间,再改变左边的标签的tabCur,并且转跳相应位置

linkageLeftRight.wxml文件

右边列表循环的那一项必须要加上 id=“scroll-{{index}}” ,少了这个是无法实现左边联动右边的效果的

<!-- 实现左右联动效果 -->
<view class="link">
  <!-- 左边 -->
  <scroll-view class="left" scroll-y scroll-with-animation scroll-top="{{scrollTops}}">
    <view class="item {{tabCur===index?'active':''}}" wx:for="{{list}}" wx:key="index" data-index="{{index}}" bindtap="tabNav">
      {{item.name}}
    </view>
  </scroll-view>
  <!-- 右边 -->
  <scroll-view class="right" scroll-y scroll-with-animation scroll-into-view="scroll-{{rightCur}}" bindscroll="scrollLink">
    <!-- 重点: id="scroll-{{index}}"  这个必须要有 不然实现不了左边联动右边的效果 -->
    <view wx:for="{{list}}" wx:key="index" class="right-cont" id="scroll-{{index}}">
      <view class="title">{{item.name}}</view>
      <view class="content">
        <view class="list-item" wx:for="{{item.list}}" wx:key="index" wx:for-index="indexs" wx:for-item="items">
          {{items}}
        </view>
      </view>
    </view>
  </scroll-view>
</view>

linkageLeftRight.wxss文件

.link {
  width: 100%;
  height: 100%;
  display: flex;
}

.left {
  width: 220rpx;
  /* 这里的高度可以写也可以不写,效果还是可以实现的,不过最好还是写上吧 */
  height: 100vh;
  background-color: rgb(229, 243, 243);
  text-align: center;
  color: #333;
}

.left .item {
  line-height: 50px;
  font-size: 34rpx;
}

.active {
  background-color: tomato;
  color: #fff;
}

.right {
  /* 这里的高度可写也可不写,效果还是可以实现的,不过最好还是写上吧 */
  height: 100vh;
  background-color: #f8f8f8;
  padding: 0 30rpx;
}

.right-cont {
  padding-bottom: 30rpx;
  border-bottom: 1rpx solid #ccc;
}

.title {
  text-align: center;
  font-size: 36rpx;
  color: #333;
  padding-top: 60rpx;
  padding-bottom: 20rpx;
}

.content {
  padding: 0 5rpx 0 20rpx;
}

.list-item{
  font-size: 32rpx;
  color: #333;
  line-height: 50rpx;
}

linkageLeftRight.js文件

import category from '../../public/json/category.js'

Page({

  /**
   * 页面的初始数据
   */
  data: {
    list: category,
    scrollTops: 0, // 要滚动的高度
    tabCur: 0, // 左边当前项
    rightCur: 0, // 用于实现左边联动右边
  },
  // 切换左边菜单并联动右边
  tabNav(e) {
    let index = e.currentTarget.dataset.index;
    this.setData({
      tabCur: index,
      rightCur: index,
      // 实现左边自动滑动到某个位置 4表示自动滑动到 第五项 (4为索引值)
      scrollTops: (index - 4) * 50
    })
  },
  /**
   * 滑动右边对应左边菜单切换
   * 1、拿到该元素的高度,设定它的top和bottom
   * 2、判断滑动的距离是否大于 设定的top并小于设定的bottom,然后对应左边菜单的滑动
   */
  scrollLink(e) {
    let list = this.data.list
    let itemHeight = 0;
    for (let i = 0; i < list.length; i++) {
      //拿到每个左边的元素 并且设置他们的上下高度 
      let els = wx.createSelectorQuery().select("#scroll-" + i);
      els.fields({
        size: true
      }, function (res) {
        list[i].top = itemHeight;
        // 设置每一个右边元素在整个菜单的高度再加上元素本身的高度设置为bottom的高度
        itemHeight += res.height;
        list[i].bottom = itemHeight
      }).exec()
    }

    this.setData({
      list
    })

    // 拿到滚动的高度
    let scrollTop = e.detail.scrollTop;
    for (let i = 0; i < list.length; i++) {
      if (scrollTop > list[i].top && scrollTop < list[i].bottom) {
        // 判断当前的高度在那个右边的某个元素之间 
        // 如果判断在i元素之中,就改变左边当前项,并且转跳左边的位置
        this.setData({
          tabCur: i,
          scrollTops: (i - 4) * 50
        })
        return false
      }
    }
  }
})

category.js文件

const category = [{
  name: '梨花雪',
  list: [
    '时光年轮一圈圈转着。',
    '现在,他站在原地,回首望去,从前点点滴滴,琐琐碎碎。',
    '猛然发现,自己已走过了这么多。',
    '他想,如果再次遇到下雪天,他会毫不犹豫迎上去,',
    '因为那里,有旧时光味道。他仍在怀念,仍在留恋。怀念,白雪纷扬日子。'
  ]
}, {
  name: '冰雪消融',
  list: [
    '友情是每个人都应有的东西,而且相当的珍贵,',
    '在朋友之间,难免会产生分歧,让友情结冰,',
    '但我现在知道,友情上消融的冰雪是暖的。'
  ]
},
{
  name: '境由心造',
  list: [
    '有人安于某种生活,有人不能。',
    '因此能安于自已目前处境的不妨就如此生活下去,不能的只好努力另找出路。',
    '你无法断言哪里才是成功的,也无法肯定当自已到达了某一点之后,会不会快乐。',
    '有些人永远不会感到满足,他的快乐只建立在不断地追求与争取的过程之中,',
    '因此,他的目标不断地向远处推移。这种人的快乐可能少,但成就可能大。'
  ]
},
{
  name: '处世之道',
  list: [
    '有一群豪猪,就是野猪啊,身上长刺的那种野猪,',
    '大家挤在一起过冬,它们老有一个困惑,',
    '就是不知道大家在一起以什么样的距离最好,',
    '离得稍微远一点,冬天就冷,互相借不着热气,大家就往一起凑凑。',
    '结果一旦凑近了,彼此的刺都扎着对方了。',
    '就又开始远离。',
    '但是再远的话大家又觉得寒冷,',
    '又想借助别人的温暖,就再凑,凑着凑着又受伤了,',
    '然后再拉远,多少次磨合以后豪猪们终于找到了一种最最恰如其分的距离,',
    '那就是在彼此不伤害的前提下,保持着群体的温暖'
  ],
},
{
  name: '夏天',
  list: [
    '夏天的夜色很美,清爽的晚风哼着小曲来到了我们身边,',
    '给我们送来了一丝丝凉意。',
    '夜空中,星星眨着眼睛,静静地听着月亮姐姐讲故事。',
    '这动听的故事,激发了星星们的想象,',
    '星星们都在窃窃私语地讨论着,难道是在讨论演讲稿,到哪里发表演讲吗?',
    '周围一片宁静,只有晚风在低低地吟唱,',
    '月光洒向永不停息的小河,洒向盛开在夜晚的流星花,仿佛一切都活了。',
    '萤火虫提着小灯笼,殷勤地照看着花儿、草儿,让他们快快长大、开花。'
  ]
}, {
  name: '风筝',
  list: [
    '一只跌落在脚边的风筝把我拉回到现实。',
    '是啊!无论风筝飞的多高、多远,但都离不开手中的丝线,',
    '最后还是要回到地面。人不也一样吗?',
    '长大了,成家了,但无论离开故乡多远,离开亲人多远,你的心还在故乡,还在父母亲人的身边啊!'
  ]
}, {
  name: '春雨',
  list: ['我赤脚站到院中,踩在青石板上,',
    '任雨水在我脸上流淌,我不禁抬起头望着那天空,',
    '努力的想要看清春雨的样子,却怎么也看不清,',
    '只听得见耳边的声音,那么清晰那么让人心情舒畅。',
    '这温柔的春雨,带来他最动听的声音,击打着石台,',
    '发出清脆的响声,声音透过雨帘,透进了我的心。'
  ]
}, {
  name: '拥有',
  list: [
    '拥有诚实,就舍弃了虚伪;',
    '拥有充实,就舍弃了无聊;拥有踏实,就舍弃了浮躁。',
    '不论是有意的丢弃,还是意外的失去,只要曾经真实的拥有,在一些时候,大度的舍弃不也是一种境界吗?',
    '在不经意所失去的, 你还可以重新去争取。 ',
    '丢掉了爱心, 你可以在春天里寻觅, 丢掉了意志, 你要在冬天重新磨砺。 ',
    '但是丢掉了懒惰, 你却不能把它拾起。 ',
    '欲望太多, 反成了累赘, 还有什么比拥有淡泊的心胸, 更能让自己充实、 满足呢? '
  ]
}, {
  name: "信任",
  list: [
    '信任一个人有时需要许多年的时间。',
    '因此,有些人甚至终其一生也没有真正信任过任何一个人,',
    '倘若你只信任那些能够讨你欢心的人,那是毫无意义的;',
    '倘若你信任你所见到的每一个人,那你就是一个傻瓜;',
    '倘若你毫不犹疑、匆匆忙忙地去信任一个人,那你就可能也会那么快地被你所信任的那个人背弃;',
    '倘若你只是出于某种肤浅的需要去信任一个人,那么旋踵而来的可能就是恼人的猜忌和背叛;',
    '但倘若你迟迟不敢去信任一个值得你信任的人,那永远不能获得爱的甘甜和人间的温暖,你的一生也将会因此而黯淡无光。'
  ]
}, {
  name: '生命',
  list: [
    '应当承认,生命就是希望。',
    '应当说,卑鄙和庸俗不该得意过早,不该误认为它们已经成功地消灭了高尚和真纯。',
    '伪装也同样不能持久,因为时间像一条长河在滔滔冲刷,',
    '卑鄙者、奸商和俗棍不可能永远戴着教育家、诗人和战士的桂冠。',
    '在他们畅行无阻的生涯尽头,他们的后人将长久地感到羞辱。'
  ]
}, {
  name: '闲情',
  list: [
    '终日休息着,睡和醒的时间界限,便分得不清。',
    '有时在中夜,觉得精神很圆满。',
    '——听得疾雷杂以疏雨,每次电光穿入,',
    '将窗台上的金钟花,轻淡清澈的映在窗帘上,又急速的隐抹了去。',
    '而余影极分明的,印在我的脑膜上。我看见“自然”的淡墨画,这是第一次。'
  ]
}, {
  name: '背影',
  list: [
    '我与父亲不相见已二年余了,我最不能忘记的是他的背影。',
    '那年冬天,祖母死了,父亲的差使也交卸了,正是祸不单行的日子,',
    '我从北京到徐州,打算跟着父亲奔丧回家。',
    '到徐州见着父亲,看见满院狼藉的东西,又想起祖母,不禁簌簌地流下眼泪。',
    '父亲说,“事已如此,不必难过,好在天无绝人之路!”'
  ]
}, {
  name: '乡愁',
  list: [
    '经过多年的风雨磨砺,我们突然意识到:',
    '那些曾在生命中抚慰过我们的精神驿站,',
    '那些曾温暖和光明过我们的贫寒童年的火光,',
    '却在不经意间,渐渐地离我们远了,',
    '模糊了——譬如母亲、譬如童年的老屋、隔壁家羊角辫摇摇摆摆的阿娇一种难以驱遣的巨大空虚和孤寂袭来,',
    '泪水顿时涌上来。这时,我们患了一种蔓延了几个世纪的病——乡愁'
  ]
}, {
  name: '天池',
  list: [
    '从第一眼瞥见天池到和她告别,我一直沉默不语。',
    '我不愿用一点声音,来弹破这宁静。',
    '天池一日我的心情是宁静的,这是我最珍爱的心境。',
    '山光湖色随着日影的移动而变幻。',
    '午餐后,睡了一会儿,一阵冷气袭来,就像全身浴在冰山雪水之中。',
    '我悄悄起来,不愿惊醒别人,独自走到廊上,',
    '再次仔细观察天池:雪峰与杉林,白与黑相映,格外分明,',
    '雪山后涌起的白云给强烈阳光照得白银一样刺眼。'
  ]
}, {
  name: '秋天',
  list: [
    '秋姑娘又来到了果园里。',
    '果园里的果子成熟了,葡萄架上挂满了一串串紫里透红的大葡萄,',
    '它们相互掩映着自己的身体,太阳出来了,',
    '照射在葡萄上就像一颗颗透明的紫色宝石。',
    '桔树上,一个个金黄色的桔子,让人看了忍不住想咬一口。',
    '假如你剥开桔皮,你就可以看见一瓣瓣桔子就像一弯弯亏月时的月亮,晶莹剔透。'
  ]
}, {
  name: '早晨',
  list: [
    '清晨的江边,没有车水马龙的喧嚣,',
    '没有人声鼎沸的吵杂,也没有让人深感压抑的匆匆人群。',
    '清晨的江边,有的只是垂柳的迎风飘拂,',
    '有的只是枝头小鸟的婉转歌唱,',
    '有的只是江风中蕴含着的淡淡的腥味。',
    '清晨的江边,很静,',
    '静的可以抚平内心的烦躁,',
    '清晨的江边,很美,绿树红花、微风拂面,不允许你携带任何忧伤。'
  ]
}, {
  name: '夏天',
  list: [
    '夏天是万物生机勃勃的季节,百花争奇斗艳,',
    '那么你知道都有哪些花是夏季开放的吗?跟随美文網小编一起来看看吧。',
    ' 描写夏天植物的美文摘抄:荷花吟 微风拂过平静的湖面,给湖面留下片片',

  ]
}, {
  name: '栾树',
  list: [
    '栾树 十二月初,深圳,我在校园的青石板小路上捡到了栾树的蒴果。',
    ' 栾树蒴果看上去有种似曾相识的漂亮--三瓣又薄又脆的果皮围拢成三棱形,',
    '前端小心翼翼地开着口'
  ]
}, {
  name: '荷塘',
  list: [
    '又是一年荷塘色 初夏早上六点,',
    '清亮透明的月儿还躲藏在云朵里,不忍离去,',
    '校园内行人稀少,我骑着单车,晃晃悠悠的耷拉着星松的睡眼。',
    '校园内景色如常,照样是绿'
  ]
}
]

export default category;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内存管理 | 一、内存管理的由来及思想

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

Linux系统常用指令篇---(一)

Linux系统常用指令篇—(一) 1.cd指令 Linux系统中&#xff0c;磁盘上的文件和目录被组成一棵目录树&#xff0c;每个节点都是目录或文件。 语法:cd 目录名 功能&#xff1a;改变工作目录。将当前工作目录改变到指定的目录下。 (简单理解为进入指定目录下) 举例: cd .. : 返…

maven 初学

1. maven 安装 配置安装 路径 maven 下载位置: D:\software\apache-maven-3.8.6 默认仓库位置: C:\Users\star-dream\.m2\repository 【已更改】 本地仓库设置为&#xff1a;D:\software\apache-maven-3.8.6\.m2\repository 镜像已更改为阿里云中央镜像仓库 <mirrors>…

文件编码格式

一、问题场景 笔者在写controller层出现了一些小问题&#xff1a;测试controller层的一些请求的时候&#xff0c;后端控制台打印的是乱码&#xff0c;网上找了很多说改UTF-8的&#xff0c;但是我去设置里面全部都改为UTF-8了&#xff0c;结果仍然无济于事&#xff0c;甚至还把…

flink自定义窗口分配器

背景 我们知道处理常用的滑动窗口分配器&#xff0c;滚动窗口分配器&#xff0c;全局窗口分配器&#xff0c;会话窗口分配器外&#xff0c;我们可以实现自己的自定义窗口分配器&#xff0c;以实现我们的自己的窗口逻辑 自定义窗口分配器的实现 package wikiedits.assigner;i…

camtasia 2023怎么导出mp4

MP4是常见的视频格式之一&#xff0c;那么使用电脑录屏软件Camtasia完成对视频的剪辑后&#xff0c;如何将其导出为MP4格式保存在我们的电脑中呢&#xff1f; 1.剪辑好视频后&#xff0c;我们找到软件界面右上角的“导出”按钮。 Camtasia Studio- 2023 win-安装包&#xff1a…

【数据结构】布隆过滤器

布隆过滤器的提出 在注册账号设置昵称的时候&#xff0c;为了保证每个用户昵称的唯一性&#xff0c;系统必须检测你输入的昵称是否被使用过&#xff0c;这本质就是一个key的模型&#xff0c;我们只需要判断这个昵称被用过&#xff0c;还是没被用过。 方法一&#xff1a;用红黑…

C/C++学习 -- 分组加密算法(DES算法)

数据加密标准&#xff08;Data Encryption Standard&#xff0c;DES&#xff09;是一种对称密钥加密算法&#xff0c;是信息安全领域的经典之作。本文将深入探讨DES算法的概述、特点、原理&#xff0c;以及提供C语言和C语言实现DES算法的代码案例。 一、DES算法概述 DES算法是…

【网络安全---XSS漏洞(1)】XSS漏洞原理,产生原因,以及XSS漏洞的分类。附带案例和payload让你快速学习XSS漏洞

一&#xff0c;什么是XSS漏洞&#xff1f; XSS全称&#xff08;Cross Site Scripting&#xff09;跨站脚本攻击&#xff0c;为了避免和CSS层叠样式表名称冲突&#xff0c;所以改为了XSS&#xff0c;是最常见的Web应用程序安全漏洞之一&#xff0c;位于OWASP top 10 2013/2017年…

idea配置文件属性提示消息解决方案

在项目文件路径下找到你没有属性提示消息的文件 选中&#xff0c;ok即可 如果遇到ok无法确认的情况&#xff1a; 在下图所示位置填写配置文件名称即可

lv7 嵌入式开发-网络编程开发 06 socket套接字及TCP的实现框架

目录 1 socket套接字 1.1 体系结构的两种形式 1.2 几种常见的网络编程接口 1.3 socket套接字 2 socket常用API介绍 2.1 API 2.2 地址族结构体 2.3 套接字类型 2.4 socket套接字 3 TCP通信的实现过程 4 练习 1 socket套接字 1.1 体系结构的两种形式 网络的体系结构 …

想要精通算法和SQL的成长之路 - 二叉树的判断问题(子树判断 | 对称性 | 一致性判断)

想要精通算法和SQL的成长之路 - 二叉树的判断问题 前言一. 相同的树二. 对称二叉树三. 判断子树 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 相同的树 原题链接 这题目典型的递归题&#xff1a; 如果两个节点都是null&#xff0c;我们返回true。如果两个节点一个nul…

【Linux】—— 详解软硬链接

前言&#xff1a; 本期&#xff0c;我将要给大家讲解的是有关 Linux下软硬链接的相关知识&#xff01;&#xff01;&#xff01; 目录 前言 &#xff08;一&#xff09;理解硬链接 1.什么是硬链接 2.创建硬链接 3.硬链接的使用场景 &#xff08;二&#xff09;理解软链接…

麦田物语学习

设置预设 将对一个物体的操作保存下来&#xff0c;直接用于其他的物体&#xff0c;比较省力 当设置好一个物体后点击箭头所指的地方&#xff0c;保存预设&#xff0c;在其他物体的面板里点击预设使用 sprite renderer 图片渲染顺序参考点 修改游戏的渲染方式 修改为按照 y 轴…

操作系统学习笔记2

文章目录 1、进程管理逻辑图2、进程的由来 参考视频&#xff1a; 操作系统 1、进程管理逻辑图 2、进程的由来

芯驰D9评测(2)--系统环境配置连接

linux开发板的软件开发三件套&#xff1a; 建立连接-->建立交叉编译环境-->建立驱动开发环境。 如果我们不涉及镜像的深度定制&#xff0c;只是平台化应用的话 1. 建立串口连接 查看手册&#xff0c; 获取接口定义说明&#xff1a; 板载一共两个端子&#xff0c;三个…

python二次开发CATIA:文字轮廓草图

CATIA V5 版本的草图中&#xff0c;并没有文字轮廓的创建命令。通常的做法是&#xff0c;再Drawing 文件中创建所需文本-->将 Drawing 文件另存为 dwg / dxf 格式-->打开另存的文件&#xff0c;文字已转为轮廓线条-->复制线条并粘贴到草图中。 本例中&#xff0c;基于…

c#+Mysql房屋租赁管理系统

一、引言 随着房价的不断升高&#xff0c;人们对房屋的需求越来越难以满足&#xff0c;对于一些在外地工作的人来说租房子成为了一种常态&#xff0c;因此出现了越来越多的房屋中介&#xff0c;而对于房屋中介而言&#xff0c;管理日益增加租户的信息和房产的信息成了一个至关…

Hono——一个小型,简单且超快的Edges Web框架

Hono - [炎]在日语中的意思是火焰&#x1f525; - 是一个小型&#xff0c;简单且超快的Edges Web框架。它适用于任何JavaScript运行时&#xff1a;Cloudflare Workers&#xff0c;Fastly ComputeEdge&#xff0c;Deno&#xff0c;Bun&#xff0c;Vercel&#xff0c;Netlify&…

【Leetcode】滑动窗口合集

这里写目录标题 209.长度最小的子数组题目思路代码 3. 无重复字符的最长子串&#xff08;medium&#xff09;题目思路 11. 最大连续 1 的个数 III题目思路 1658. 将 x 减到 0 的最⼩操作数题目思路代码 904. 水果成篮题目思路代码 438.找到字符串中所有字母的异位词题目思路代码…