小程序 横向滚动导航栏
先上案例最终效果:
案例实现功能:
1.导航栏横向滚动效果
2.当前元素有下划线标识
3.点击元素,导航栏滚动到相应位置
以下将分步骤逐步完善陈述这些功能,最终会呈现所有代码
1.引用组件scroll-view,达到滚动效果
万丈高楼平地起,首先要达到横向滚动的效果
wxml
<view><scroll-view scroll-x="true" enable-flex="true" class="scroll"><block wx:for="{{ nav }}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="nav-item">{{ item }}</view></block></scroll-view>
</view>
scroll-view:小程序原生组件,使得里面的元素可以左右或上下滚动,scroll-x设置内容横向滚动,enable-flex允许内容使用flex布局(这里只是允许,还需要在相应的class中还需要添加flex布局语句,即display:flex;)
block与view:在小程序中block是不做数据渲染的,它本身在页面中不占据任何空间,它用于做逻辑处理的容器,与wx:for,wx:if等属性联用。以上代码把for放到view最终效果是一样的。
wxss
.scroll {width: 90%;height: 80rpx;line-height: 80rpx;margin: 0 auto;display: flex;/* 超出部分隐藏 */overflow: hidden;/* 文本不换行 */white-space: nowrap;
}.nav-item {margin-right: 20rpx;
}
截至到此处只引用了js代码中一个nav数组
2.点击元素时添加下划线标识,并滚动到相应位置(最终效果)
实现思路:
1.添加下滑线标识:给元素添加点击事件,并动态绑定class,点击某个元素,传递此元素的下标到绑定方法中,该表变量current的值为当前下标,如此一来,在动态绑定的class中current对应某个index,触发current-nav样式
2.滚动位置:在点击元素之后,动态设置scroll-left的值,即可控制滚动条滚动距离。问题在于我们要滚动多少距离?我的设置是滚动距离为使得每个项的左边界位于手机屏幕的中间,若距离不够则保留默认滚动距离。微信小程序的特殊优势,点击事件方法的参数(events)中包含点击元素的横向滚动宽度,我们拿到这个值,再获取手机宽度即可
wxml
<view><scroll-view scroll-x="true" enable-flex="true" class="scroll" scroll-left="{{ scrollLeft }}" scroll-with-animation="true"><block wx:for="{{ nav }}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="nav-item {{ current==index?'current-nav':'' }}" bindtap="currentNav" data-index="{{ index }}" >{{ item }}</view></block></scroll-view>
</view>
scroll-left:控制滚动条向左滚动距离,默认为0;
scroll-with-animation:滚动效果
data-index="{{ index }}":传递点击元素的下标
js
// pages/nav/nav.js
Page({/*** 页面的初始数据*/data: {nav: ['全部','水果蔬菜','家电','图书','生活用品','测试','还是测试','依然是测试'],// 当前项目current: 0,// 滚动栏滚动距离scrollLeft: 0,// 窗体宽度windowWidth: 0},onLoad: function (options) {// 设置标题wx.setNavigationBarTitle({title: '导航栏案例',});// 获取窗体宽度wx.getSystemInfo({success: (result) => {this.setData({windowWidth: result.windowWidth})},})},/*** * 导航栏点击响应事件* * 1.点击项目出现下滑线* 2.点击项目,导航栏滚动,使得项目出现再屏幕固定位置* */currentNav: function (e) {console.log(e);let index = e.currentTarget.dataset.index;let scrollLeft = e.currentTarget.offsetLeft - ( this.data.windowWidth * 0.9 ) / 2;this.setData({current: index,scrollLeft: scrollLeft})}})
因为我的滚动条设置宽度为屏幕的90%,所以计算滚动位置时略有不同,逻辑跟上面的陈述一致
打印currentNav的参数:
offsetLeft:点击元素的横向距离
index:元素的下标(我点击了第二个元素)
wxss
.scroll {width: 90%;height: 80rpx;line-height: 80rpx;margin: 0 auto;display: flex;/* 超出部分隐藏 */overflow: hidden;/* 文本不换行 */white-space: nowrap;
}.nav-item {margin-right: 20rpx;
}// 添加下边界
.current-nav {border-bottom: 1px solid #f86442;
}
无论是小程序还是web项目,做相似的功能时,实现的思路是一致的,只是使用的工具不同。解决问题的思路是一切的开始,也是最重要的部分。
小程序 横向滚动导航栏相关推荐
- 微信小程序,自定义导航栏组件
微信小程序,自定义导航栏组件,可兼容iPhone 11及以上留海屏显示,关于参数获取设置参照微信小程序-收藏_羽筠的博客-CSDN博客 可定义设置的内容如下: 文字及返回箭头颜色 背景图片(优先级高于 ...
- 微信小程序 自定义顶部导航栏标题 navigationStyle
微信小程序 自定义顶部导航栏标题 单页面自定义导航栏 修改需要自定义的页面,的页面配置.json文件 全部页面自定义导航 修改公共页面配置app.json 单页面自定义导航栏 修改需要自定义的页面,的 ...
- 微信小程序制作顶部导航栏
1问题描述 使用微信小程序开发者工具制作顶部导航栏. 2算法描述 首先就是对微信小程序开发者工具的配置,官网搜索后进入,选择稳定版,Windows64位下载. 然后点开开发者工具,选择小程序,点击图片 ...
- 微信小程序之顶部导航栏(选项卡)实例 —— 微信小程序实战系列(1)
需求:顶部导航栏 效果图: wxml: <!--导航条--> <view class="navbar"><text wx:for="{{na ...
- uni-app实现小程序沉浸式导航栏/顶部组件占满导航栏
uni-app实现小程序沉浸式导航栏/顶部组件占满导航栏 如果你只是想单纯的让屏幕最上方的那个组件(比如swiper)将通知栏(导航栏)填充满,那么你只需要在page.json文件中加入以下代码到你想 ...
- 微信小程序——沉浸式导航栏实现
微信小程序--沉浸式导航栏实现 微信小程序中导航栏一般来说是默认的展示标题等等,可以做的样式改变仅仅能通过配置一些官方提供的属性来实现.除此之外小程序还提供了navigationStyle这个属性可以 ...
- 微信小程序的自定义导航栏
微信小程序的导航栏主要分为两个部分:状态栏和标题栏. 关于微信小程序的自定义导航栏也就是通过微信小程序官方提供的API接口来算出状态栏和标题栏的高度. 注意获取到的数值单位都是px. 首先要开启自定义 ...
- 微信小程序在底部导航栏使用扫一扫功能【代码可用】
微信小程序在底部导航栏使用扫一扫功能 解决方案 uni-app 微信原生代码 在家躺着也能遇到奇奇怪怪的需求,这不,需要在微信小程序底部的导航栏中加一个扫一扫功能⭐╮( ̄﹏ ̄)╭⭐. 解决方案 在导航 ...
- 小程序解决自定义导航栏--刘海屏自适应问题
小程序解决自定义导航栏–刘海屏自适应问题 今天做一个自定义的导航栏.iPhoneX和安卓的样式一直都是不一样,后面看了一些方法,解决了这个问题. 第一步(Json) "navigationS ...
最新文章
- 分布式锁的三种实现方式_基于 redis 的分布式锁实现
- Storm【压力测试】- 系列1: 进行简单的压力测试
- oracle 当前年到指定年的年度范围求取
- tensorflow(4)踩过的一些坑
- 【版本工具】cvs,svn,git等版本工具区别
- golang 1.9 sp MySQL_Golang-使用mysql
- command not found Operation not permitted
- 如何兼容html在不同分辨力的问题,现代教育技术练习题
- mysql列属性auto(mysql笔记四)
- mysql不兼容_mysql5.7 不兼容问题
- 黑客秘笈-渗透测试实用指南 第三版
- 工作五年的UI设计师,现在混的怎么样?不看是你的损失
- 用python画简单的图案-使用 Python Turtle 设计简单而又美丽的图形
- 基于GPU的大规模图计算系统与应用
- 一天入门Tableau详细教程(上)
- uniapp上拉加载
- 合肥工业大学计算机网络期中考试,计算机网络实验报告合肥工业大学
- class ts 扩展方法_ts各种类型和用法
- 截取指定字符前面或后面的字符串
- 内核驱动隐藏【绕过PatchGuard】
热门文章
- 朴素贝叶斯 二项式 伯努利
- 恩格尔注塑机数据采集
- 区块链技术如何赋能医学成像?
- 基于JAVA医保局综合办公系统计算机毕业设计源码+系统+数据库+lw文档+部署
- html 设置min height,CSS中min-height使用技巧
- 实例演示Nginx重写(Rewrite)类型last、break、redirect和permanent的区别
- 卓懿9.0正式版来袭
- java mvn命令行_Maven命令行使用:mvn clean package(打包)
- [转]Go在谷歌:以软件工程为目的的语言设计
- python爬虫东方财富网_Python爬虫入门:以东方财富网为例