写一个小程序可移动导航组件

1.创建文件夹及文件
  

 

2.编写index.js

/**
 * 导航组件
 */
Component({
    /**
     * 组件的data
     */
    data: {
        top:456,//初始显示坐标 单位px
        left:317,
        showNav:false //显示导航
    },
    /**
     * 组件的方法列表
     */
    methods: {
        move(e) {//移动时触发的方法
            let that = this;
            that.setData({
                top: e.changedTouches[0].pageY,//重置坐标
                left: e.changedTouches[0].pageX
            })
        },
        navigation(e){//显示或隐藏导航菜单
            this.setData({
                showNav: !this.data.showNav
            })
        },
        goHome(){
            wx.switchTab({//菜单功能 回首页
                url: '/pages/shop/index/index'
            })
        },
        goExit(){
            wx.redirectTo({//菜单功能 退出
                url: "/pages/login/login",
            })
        }
    }
})

 

3.编写index.json

 

{
    "component": true
}

 

 

 4.编写index.wxml

<!-- 组件模板 -->
<wxs module='calc'>
var calc = function(top,px){
    if(top>200){
        return top-px
    }else{
        return top+px
    }
}
module.exports.calc = calc;
</wxs>
<view>
    <view class='shade' wx:if="{{showNav}}">
    </view>
    <view wx:if="{{showNav}}">
        <view catchtap='goHome' class='navigation home' style='top:{{calc.calc(top,150)}}px;left:{{left}}px;'>
            <view class='icon_container'>
                <icon class='iconfont icon-shop'></icon>
                <text>首页</text>
            </view>
        </view>
        <view catchtap='goExit' class='navigation exit' style='top:{{calc.calc(top,80)}}px;left:{{left}}px;'>
            <view class='icon_container'>
                <icon class='iconfont icon-exit'></icon>
                <text>退出</text>
            </view>
        </view>
        <view catchtap='navigation' class='navigation close' style='top:{{top}}px;left:{{left}}px;'>
            <icon class='iconfont icon-close'></icon>
        </view>
    </view>
    <movable-view wx:if="{{!showNav}}" class='navigation' catchtap='navigation' catchtouchmove='move' style='top:{{top}}px;left:{{left}}px;'>
        <text>导航</text>
    </movable-view>
</view>

 

 

 5.编写index.wxss (这儿引用了本地iconfont)

@import "/lib/style/iconfont.wxss";
.navigation {
    position: fixed;
    bottom: 150rpx;
    right: 50rpx;
    width: 80rpx;
    height: 80rpx;
    border: 1px solid #fff;
    background: #e5a600;
    border-radius: 50%;
    box-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.4);
    display: flex;
    justify-content: center;
    z-index: 999;
}
.navigation>text{
    line-height: 80rpx;
    color: #fff;
    font-size: 12px;
}

.navigation.exit {
    bottom: 320rpx;
    background: #fff;
}

.navigation.home {
    bottom: 470rpx;
    background: #fff;
}

.navigation.exit  icon, .navigation.home icon {
    color: #333;
}

.navigation.close>icon{
    color: #fff;
}
.navigation icon {
    line-height: 80rpx;
    font-size: 22px;
    width: 100%;
    text-align: center;
}
.navigation .icon_container{
    width: 100%;
    text-align: center;
}
.navigation .icon_container text{
    color: #fff;
    font-size: 14px;
    text-shadow: 0px 2px 5px 0px rgba(0, 0, 0, 0.4);
}

.shade {
    z-index: 1;
    position: fixed;
    top: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.4);
}

 

 

 

 以上就完成了小程序组件的编写,需要注意的是 wxml代码中使用了 movable-view 标签  使用view标签会导致向下拖动 导航按钮 时触发下拉刷新事件 用户体验极差!

下面开始在页面中调用组件

1.在页面对应的json文件中加入代码,声明使用自定义组件

"usingComponents": {
  "app-navigation": "/utils/navigation/index"
}

 

usingComponents 使用组件

app-navigation 相当于给你的组件起了别名 在wxml 中直接使用该标签即可

/utils/navigation/index 是组件的项目路径

需要使用到多个自定义组件时在usingComponents 里 用英文的‘,’分开

2.在页面中调用

 

 直接在最底部加上  

<app-navigation></app-navigation>
即可

 

 效果图:

 

 

 

posted @ 2018-09-26 14:58  leeseett  阅读(669)  评论(0编辑  收藏  举报