uniapp自定义顶部搜索框兼容微信小程序

技术图片

自定义组件 navbarvue

(胶囊底部高度 - 状态栏的高度) + (胶囊顶部高度 - 状态栏内的高度) = 导航栏的高度

<template> <view class="navbar"> <view class="navbar-fixed"> <!-- 状态栏小程序撑起高度 --> <view :style="{height:statusBarHeight+‘px‘}"></view> <view class="navbar-content" :style="{height:navBarHeight+‘px‘,width:windowWidth+‘px‘}"> <view class="navbar-search"> <view class="navbar-search_icon"> <uni-icons type="search" size="16" color="#999"></uni-icons> </view> <view class="navbar-serach"> <input class="navbar-search_text" type="text" v-model="val" placeholder="请输入您要搜索的内容" /> </view> </view> </view> </view> <!-- 需要添加占位符高度 状态栏高度+导航栏高度(否则下面tab会塌陷)--> <view :style="{height: statusBarHeight+navBarHeight+‘px‘}"></view> </view></template><script> export default { name: ‘navbar‘, data() { return { statusBarHeight: 20,/* 状态栏高度 */ navBarHeight: 45,/* 导航栏高度 */ windowWidth: 375,/* 窗口宽度 */ /* 设定状态栏默认高度 */ val: ‘‘/* 导航栏搜索框的值 */ }; }, created() { // 获取手机系统信息 const info = uni.getSystemInfoSync() // 设置状态栏高度(H5顶部无状态栏小程序有状态栏需要撑起高度) this.statusBarHeight = info.statusBarHeight this.windowWidth = info.windowWidth // 除了h5 app mp-alipay的情况下执行 // #ifndef H5 || APP-PLUS || MP-ALIPAY // 获取胶囊的位置 const menuButtonInfo = uni.getMenuButtonBoundingClientRect() console.log(menuButtonInfo); // (胶囊底部高度 - 状态栏的高度) + (胶囊顶部高度 - 状态栏内的高度) = 导航栏的高度 this.navBarHeight = (menuButtonInfo.bottom - info.statusBarHeight) + (menuButtonInfo.top - info.statusBarHeight) this.windowWidth = menuButtonInfo.left // #endif } }</script><style lang="less"> @import ‘../../common/css/icons.css‘; @import ‘./../../uni.less‘; .navbar { .navbar-fixed { position: fixed; top: 0; left: 0; z-index: 99; width: 100%; background-color: @mk-base-color; .navbar-content { display: flex; justify-content: center; align-items: center; padding: 0 15px; height: 45px; box-sizing: border-box; .navbar-search { display: flex; align-items: center; padding: 0 10px; width: 100%; height: 30px; border-radius: 30px; background-color: #fff; .navbar-search_icon { // width: 10px; // height: 10px; margin-right: 10px; } .navbar-search_text { width: 100%; font-size: 14px; color: #999; } } &.search { padding-left: 0; .navbar-content__search-icons { margin-left: 10px; margin-right: 10px; } .navbar-search { border-radius: 5px; } } } } }</style>

uni.less文件

/** * 这里是uni-app内置的常用样式变量 * * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App * *//** * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 * * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 *//* 颜色变量 */@mk-base-color : #f07373;/* 行为相关颜色 */@uni-color-primary: #007aff;@uni-color-success: #4cd964;@uni-color-warning: #f0ad4e;@uni-color-error: #dd524d;/* 文字基本颜色 */@uni-text-color:#333;//基本色@uni-text-color-inverse:#fff;//反色@uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息@uni-text-color-placeholder: #808080;@uni-text-color-disable:#c0c0c0;/* 背景颜色 */@uni-bg-color:#ffffff;@uni-bg-color-grey:#f8f8f8;@uni-bg-color-hover:#f1f1f1;//点击状态颜色@uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色/* 边框颜色 */@uni-border-color:#c8c7cc;/* 尺寸变量 *//* 文字尺寸 */@uni-font-size-sm:24rpx;@uni-font-size-base:28rpx;@uni-font-size-lg:32rpx;/* 图片尺寸 */@uni-img-size-sm:40rpx;@uni-img-size-base:52rpx;@uni-img-size-lg:80rpx;/* Border Radius */@uni-border-radius-sm: 4rpx;@uni-border-radius-base: 6rpx;@uni-border-radius-lg: 12rpx;@uni-border-radius-circle: 50%;/* 水平间距 */@uni-spacing-row-sm: 10px;@uni-spacing-row-base: 20rpx;@uni-spacing-row-lg: 30rpx;/* 垂直间距 */@uni-spacing-col-sm: 8rpx;@uni-spacing-col-base: 16rpx;@uni-spacing-col-lg: 24rpx;/* 透明度 */@uni-opacity-disabled: 0.3; // 组件禁用态的透明度/* 文章场景相关 */@uni-color-title: #2C405A; // 文章标题颜色@uni-font-size-title:40rpx;@uni-color-subtitle: #555555; // 二级标题颜色@uni-font-size-subtitle:36rpx;@uni-color-paragraph: #3F536E; // 文章段落颜色@uni-font-size-paragraph:30rpx;

相关文章