• uni-app自定义顶部搜索框兼容微信小程序


    自定义组件 navbarvue

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

    <template>
        <view class="navbar">
            <view class="navbar-fixed">
                <!-- 状态栏小程序撑起高度 -->
                <view :style="{height:statusBarHeight+'px'}"></view>
                <view class="navbar-content" :style="{height:navBarHeight+'px',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 './../../uni.less';
    
        .navbar {
            .navbar-fixed {
                position: fixed;
                top: 0;
                left: 0;
                z-index: 99;
                 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;
                         100%;
                        height: 30px;
                        border-radius: 30px;
                        background-color: #fff;
    
                        .navbar-search_icon {
                            //  10px;
                            // height: 10px;
                            margin-right: 10px;
                        }
    
                        .navbar-search_text {
                             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;

    摘自:https://www.cnblogs.com/NB-JDzhou/p/13664072.html

  • 相关阅读:
    常用模块汇总
    day 16 常用模块 time 和 datetime(1)
    二分法 函数式 模块
    day 15 模块 (3)
    vue require.context 检索文件夹内文件路径
    Node.js搭建本地服务,读取css/js/img/html等各种格式文件
    Nodejs搭建web服务器
    el-table横向滚动条固定在屏幕最下方显示
    IE浏览器 backspace键使浏览器回退
    vue ElementUI el-input 键盘enter事件 导致刷新表单问题
  • 原文地址:https://www.cnblogs.com/wt645631686/p/14357348.html
Copyright © 2020-2023  润新知