微信小程序实现导航栏和内容上下联动功能代码

  今日给大家分享一下如何实现导航栏(nav)和内容部分上下联动(相关代码模块我已单独整理放到github上面了,欢迎前来start)。

github地址:https://github.com/sunshime/weChatSkill

一、效果图:

二、实现过程:

   主要是使用 scroll-view 实现导航栏部分,用 swiper 实现下面的内容部分,通过 swipercurrent 属性和导航栏的 index 相互对应来实现导航栏部分切换时内容部分跟随切换;通过 swiperbindchange 事件拿到当前轮播的索引,对应赋值实现导航栏随着内容切换的效果。

这里有几点是有必要注意一下的:

  • scroll-view 标签必须加上行内样式 overflow:hidden;white-space:nowrap; 否则无法实现滑动效果;
  • scroll-view 包裹的要滑动的盒子元素要让它们变成行内块级元素(display:inline-block;)进行横向排列;
  • scroll-view 包裹的需要滑动的盒子元素使用 display:flex; 是不起作用(无效)的;
  • scroll-view 包裹的需要滑动的盒子元素不能使用浮动。

三、相关代码如下:

(一)wxml

<view class="uplink">
	<scroll-view scroll-x scroll-with-animation scroll-left="{{scrollLefts}}" class="scroll-top" style="overflow:hidden;white-space:nowrap;">
		<view class="top-item {{curIndex===index?'active':''}}" wx:for="{{list}}" wx:key="index" data-index="{{index}}" bindtap="tabNav">{{item.name}}</view>
	</scroll-view>
	<swiper class="swiper" current="{{curIndex}}" bindchange="changeScroll" duration="{{duration}}">
		<swiper-item wx:for="{{list}}" wx:key="index" class="swipers-item">{{item.list}}</swiper-item>
	</swiper>
</view>

(二)wxss

.uplink {
 width: 100%;
 height: 100%;
}

.scroll-top {
 height: 100rpx;
 line-height: 100rpx;
 width: auto;
 background-color: #fff5f5;
}

.top-item {
 display: inline-block;
 width: 65px;
 text-align: center;
 font-size: 32rpx;
 color: #333;
}

.active {
 font-size: 36rpx;
 color: rgb(216, 27, 27);
}

.swiper {
 padding: 20rpx 30rpx;
 height: 100vh;
}

.swipers-item {
 font-size: 32rpx;
 color: #333;
 line-height: 60rpx;
 text-indent: 70rpx;
}

(三)js

import linkageList from '../../api/linkage'
Page({

 /**
  * 页面的初始数据
  */
 data: {
  list: linkageList,
  curIndex: 0,
  scrollLefts: 0,
  duration:300
 },
 // 导航栏滑动
 tabNav(e) {
  let index = e.target.dataset.index;
  this.setData({
   curIndex: index,
   scrollLefts: (index - 2) * 65
  })
 },
 // 内容滑动
 changeScroll(e) {
  let index = e.detail.current;
  this.setData({
   curIndex: index,
   scrollLefts: (index - 2) * 65
  })
 }
})

(四)模拟数据文件

const linkageList = [{
  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 linkageList;

总结

到此这篇关于微信小程序实现导航栏和内容上下联动功能的文章就介绍到这了,更多相关微信小程序导航栏和内容上下联动内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 微信小程序自定义导航栏实例代码

    背景 在做快狗打车小程序时,关于默认导航栏,我们遇到了以下的问题: Android.IOS手机对于页面title的展示不一致,安卓title的显示不居中 页面的title只支持纯文本级别的样式控制,不能够做更丰富的title效果 左上角的事件无法监听.定制 路由导航单一,只能够返回上一页,深层级页面的返回不够友好 我们希望的是:在各个机型页面上title一致性 & 个性化展示.取得左上角点击事件控制权及深层级页面的一键返回 实现 step1 自定义 第一步 取得导航栏的控制权 小程序支持自定义导

  • 微信小程序 使用picker封装省市区三级联动实例代码

    微信小程序 使用picker封装省市区三级联动实例 目前学习小程序更多的是看看能否二次封装其它组件,利于以后能快速开发各种小程序应用.目前发现picker的selector模式只有一级下拉,那么我们是否可以通过3个picker来实现三级联动模板的形式来引入其它页面中呢?答案是肯定可以的.那么我的思路是这样的: 1.使用template模板语法进行封装,数据从页面传入 2.根据picker组件的语法,range只能是一组中文地区数组,但是我们需要每个地区的唯一码来触发下一级联动数据.这样,我的做法

  • 详解微信小程序胶囊按钮返回|首页自定义导航栏功能

    项目代码:https://github.com/Shay0921/header-navbar.git 在小程序中,从转发出来的小程序消息卡片进入,因为页面栈中只有一个,所以不会出现返回按钮,对于一些电商平台来说,当商品被转发后会很影响客户查看其它产品和首页,这时候就需要使用自定义导航栏自己写一个"胶囊按钮".如下图所示: 从别的页面点到商品页时会有返回和首页按钮: 当从分享页进入到商品页时,因为页面栈只有一个,所以只有首页按钮: 首先我们需要如何开启自定义导航栏,查看手册后会发现一个页

  • 微信小程序顶部导航栏滑动tab效果

    小程序商品展示需要导航栏的商品分类进行滑动,供大家参考,具体内容如下 效果图: 首先是滑动的效果: <scroll-view scroll-x="true" style="width: 100%;white-space:nowrap;"> </scroll-view> 小程序使用</scroll-view>,横向移动即可 WXML:这里面我将导航栏显示类目定义为5个,每个20%,当超出5个分类,也就是index>4的时候,导

  • 微信小程序导航栏跟随滑动效果的实现代码

    效果图 .wxml <view class='tabBar'> <view class='tabItem wx:if="{{tabClick===0?"click":""}}"' bindtap='clickTab' data-index='0'>tab1</view> <view class='tabItem wx:if="{{tabClick===1?"click":&q

  • 微信小程序 开发之顶部导航栏实例代码

    微信小程序 开发之顶部导航栏 需求:顶部导航栏 效果图: wxml: <!--导航条--> <view class="navbar"> <text wx:for="{{navbar}}" data-idx="{{index}}" class="item {{currentTab==index ? 'active' : ''}}" wx:key="unique" bindtap=

  • 微信小程序实现左右列表联动

    本文实例为大家分享了微信小程序实现左右列表联动的具体代码,供大家参考,具体内容如下 效果图: 直接上代码: wxml界面: <view class='header'> <text class='headerClass'>分类</text> <text class='headerPin'>/品牌</text> <view class="search"> <image src='/images/搜索.png'&g

  • 微信小程序教程系列之设置标题栏和导航栏(7)

    微信小程序标题栏和导航栏的设置方法,具体内容如下 设置标题栏 标题栏window 在app.json文件里面,通过window对象里面的属性进行设置 示例: app.json: 运行: 设置导航栏 导航栏TabBar 如果我们的小程序是一个多 tab 应用(客户端窗口的底部或顶部有 tab 栏可以切换页面),那么我们可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面. Tip: 通过页面跳转(wx.navigateTo)或者页面重定向(wx.redirect

  • 微信小程序实现的picker多级联动功能示例

    本文实例讲述了微信小程序实现的picker多级联动功能.分享给大家供大家参考,具体如下: wxml部分: <picker mode="multiSelector" bindchange="bindjobcatchange" bindcolumnchange="bingjobcatcolumnchange" value="{{multiIndex}}" range="{{job_cat_list}}"

  • 微信小程序实现导航栏和内容上下联动功能代码

      今日给大家分享一下如何实现导航栏(nav)和内容部分上下联动(相关代码模块我已单独整理放到github上面了,欢迎前来start). github地址:https://github.com/sunshime/weChatSkill 一.效果图: 二.实现过程:    主要是使用 scroll-view 实现导航栏部分,用 swiper 实现下面的内容部分,通过 swiper 的 current 属性和导航栏的 index 相互对应来实现导航栏部分切换时内容部分跟随切换:通过 swiper 的

  • 微信小程序自定义导航栏

    本文实例为大家分享了微信小程序自定义导航栏,供大家参考,具体内容如下 在微信小程序中导航栏是可以直接配置的: 目前只支持二种,但是我们的需求可能需要一个其他的颜色等,那么不得不修改这个了, "window":{ "navigationStyle": "custom" }, 我就配置了这个属性,现在来看看我的界面 红色箭头指向的是配置后自动生成的,我没有写任何代码,比如我在更多界面导航栏需要自定义,那么在more.js中在onLoad()方法中获取

  • 微信小程序自定义导航栏(模板化)

    前段时间写过一篇关于微信小程序自定义导航栏的自定义组件,但是对于分享页有一定的bug 这次用模板化又搞了一遍 优化了下Android与IOS 显示更接近微信原生的导航栏,以及修复分享页面不显示返回首页按钮 如果大家不习惯模板化的话可以 针对自己的需求拿以前封装的组件化做一些修改 微信小程序自定义导航栏(组件化) CustomNavBar.wxml <template name="CustomNavBar"> <block wx:if="{{ showNavB

  • 微信小程序顶部导航栏可滑动并选中放大

    这篇文章主要介绍了微信小程序顶部导航栏可滑动并选中放大,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 老规矩,先看效果图 可以看到我们实现了如下功能 1,顶部导航栏 2,可以左右滑动的导航栏 3,选中条目放大 原理其实很简单,我这里把我研究后的源码发给大家吧. wxml文件如下 <!-- 导航栏 --> <scroll-view scroll-x class="navbar" scroll-with-animatio

  • uniapp微信小程序自定义导航栏的全过程

    目录 前言 那么标题栏的高度我们怎么获取呢? 献上源码: 组件使用: 效果图: 总结 前言 相信很多小伙伴在使用uniapp进行多端开发的时候呢,在面对一些奇葩的业务需求的时候,uniapp给我们提供的默认导航栏已经不能满足我们的业务需求了,这个时候就需要我们自己自定义导航栏使用啦. 当然uniapp也给我们提供了很多的自定义导航栏的插件供大家使用,今天也给大家分享一个我自己写的导航栏啦,希望大家多多指点 首先我们在自定义导航栏的时候,我们需要知道头部的导航栏有哪几部分组成,那么我们以微信小程序

  • 微信小程序自定义导航栏效果

    本文实例为大家分享了微信小程序自定义导航栏的具体代码,供大家参考,具体内容如下 第一步 添加属性 “navigationStyle”: “custom” 全局: app.json中添加属性 “navigationStyle”: “custom” "window": {     "backgroundTextStyle": "light",     "navigationBarBackgroundColor": "#f

  • 微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)

    本文实例讲述了微信小程序MUI导航栏透明渐变功能.分享给大家供大家参考,具体如下: 导航栏透明渐变效果 实现原理 1. 利用position:absolute在导航下定位一个view作为背景渐变使用; 2. 通过改变改view的opacity来实现透明渐变. WXML <!--pages/scroll/scroll.wxml--> <view style="height:100%;position:fixed;width:100%;"> <scroll-v

  • 微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)

    本文实例讲述了微信小程序MUI导航栏透明渐变功能.分享给大家供大家参考,具体如下: 导航栏透明渐变效果 实现原理 1. 给page-group设置的背景颜色采用rgba; 2. 通过改变rgba其中a的值来实现透明渐变. WXML <view style="height:100%;position:fixed;width:100%;"> <scroll-view scroll-y="false" bindscroll="scroll&qu

  • 微信小程序实现导航栏选项卡效果

    本文实例为大家分享了微信小程序实现MUI顶部选项卡的具体代码,供大家参考,具体内容如下 DEMO下载 效果图 WXML <import src="../../template/list.wxml"/> <view class="tui-tabbar-content"> <view class="tui-tabbar-group"> <text data-id="0" bindtap=&

随机推荐