uniapp顶部提示栏实现

效果:

用途:用于展示较短系统通知

实现逻辑:

1.通过请求获取该显示的通知内容,目前所考虑的字段有:

{
    id: 200,     // 通知标识,后续会用其阻止用户关闭后无休止开启
    message: "请勿以系统规定的其它方式获取相关道具,一旦发现,将给予封号处罚!", 
    force: false,     // 是否强制,true--不可关闭,false--可关闭
    open: true        // 用于管理通知的开关,最多只有一条消息处于开启状态,后台只返回开启的通知
}

2.通过占位与fixed使显示内容位置固定

<view style="height: 30px;" v-if="!isClose">
		<view class="p-tb-5" style="white-space: nowrap; overflow: hidden; width: 90%; font-size: 12px; background-color: beige; position: fixed; z-index: 20;">
			<view style="display: flex;">
				<view class="scroll-text"  style="width: 90%;">
					{{notice.message}}
				</view>
				<view @click="toCloseNotice" v-if="!notice.force" style="z-index: 10; width: 10%; background-color: beige;" class="center-hor">
					<image src="../../static/icon/error.png" class="iconImage-20"></image>
				</view>
			</view>
		</view>
	</view>

并给予文字显示滚动效果

.scroll-text {
	  display: inline-block;
	  will-change: transform; /* 提高性能 */
	  animation: scroll-left 10s linear infinite; /* 动画效果 */
	}
	
	/* 定义动画 */
	@keyframes scroll-left {
	  from {
	    transform: translateX(100%);
	  }
	  to {
	    transform: translateX(-100%);
	  }
	}

3.设置显示效果与关闭

export default {
		name:"topNotice",
		data() {
			return {
				notice: commonApi.getNotice(),
				isClose: false
			};
		},
		methods: {
			isClosed() {
				const ids = uni.getStorageSync("closedids")
				if(ids && ids === this.notice.id) {
					return true
					// return ids.includes(this.notice.id)
				}
				return false
			},
			
			toCloseNotice() {
				// const ids = uni.getStorageSync("closedids") || []
				// ids.push(this.notice.id)
				uni.setStorageSync("closedids", this.notice.id)
				this.isClose = this.isClosed()
			}
		},
		mounted() {
			this.isClose = this.isClosed()
		}
	}

### 实现 UniApp 自定义导航功能 在 UniApp 中使用 uView UI 框架实现自定义导航效果,主要涉及以下几个方面: #### 1. 配置 `manifest.json` 文件 为了启用自定义导航,在项目的 `manifest.json` 文件中设置 `navigationStyle` 属性为 `custom`。这一步是为了告诉平台不使用默认的导航,而是由开发者自行设计。 ```json { "pages": [ { "path": "pages/index", "style": { "navigationBarTitleText": "", "navigationStyle": "custom" } } ] } ``` 此操作允许开发人员完全控制顶部区域的设计和交互逻辑[^1]。 --- #### 2. 使用 uView 提供的组件构建导航 uView 提供了丰富的组件库支持复杂的布局需求。例如,可以组合 `<u-navbar>` 和其他基础组件创建沉浸式导航或者带有 Tabs 吸顶效果的界面。 以下是基于 uView 的简单示例代码片段展示如何制作一个带返回按钮的基础定制化头部结构: ```html <template> <view class="container"> <!-- 定制化的导航条 --> <u-navbar :is-back="true" title="我的标题"></u-navbar> <!-- 主体内容区 --> <scroll-view scroll-y style="height: calc(100vh - var(--window-top));"> <text>这里是页面主体部分</text> </scroll-view> </view> </template> <script> export default { data() { return {}; }, }; </script> <style scoped lang="scss"> .container { display: flex; flex-direction: column; height: 100%; } /* 可选样式 */ .scroll-content { padding: 20rpx; } </style> ``` 上述例子展示了基本的自定义导航集成方式,并且解决了动态计算剩余空间给可滚动容器的问题^。 --- #### 3. 处理特殊场景下的问题 当遇到某些特定情况时(如下拉菜单位置错乱或遮挡底层内容等问题),可以根据实际项目情况进行针对性优化处理: ##### (a) 下拉框偏移修正 对于由于原生返回键占据额外像素而引发的内容偏离现象,可通过 CSS 调整子层定位参数予以纠正。具体做法是在 dropdown 组件外包裹一层绝对定位盒子并手动指定其宽高尺寸匹配屏幕边界[^3]: ```css .u-dropdown__menu-box { position: absolute !important; top: 88rpx; /* 对应状态加导航总高度 */ left: 0; width: 100vw; z-index: 999; } ``` ##### (b) 页面点击失效修复 针对因导航层级过高干扰到下方触控反馈的情况,建议重新审视视图堆叠顺序关系。一种可行策略是从源码层面入手调整相关 DOM 结构优先级;另一种更简便的办法则是借助 JavaScript 动态操控目标节点属性值完成预期表现. --- #### 4. 底部 TabBar 设计扩展 除了顶部导航之外,有时还需要搭配底部标签页共同构成完整的应用框架体系。此时同样依赖于 manifest 设置开启 custom mode 并编写对应的 HTML 片段描述各个入口链接地址以及图标素材路径等必要信息项[^4]: ```json "tabBar": { "custom": true, "list": [ { "pagePath": "pages/home/index", "iconPath": "./static/icons/home.png", "selectedIconPath": "./static/icons/home-active.png", "text": "首页" }, ... ] }, ``` 随后再配合 Vue 单文件组件形式逐一渲染各模块内部细节即可达成最终视觉呈现效果. --- ### 总结 综上所述,通过合理规划全局配置选项并与第三方插件无缝衔接能够轻松打造出满足业务诉求的各种个性化导航体验。无论是简单的文字提示还是复杂动画过渡均能游刃有余应对各种挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小凳子在线

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值