内容简介:关于微信小程序的tarbar,相信你们都不会陌生 在实现小程序微信原装的tabbar却比较呆板,不够精致,往往不符合自己的要求先说一下这套方案的优点:实现这套方案核心还是自定义组件
关于微信小程序的tarbar,相信你们都不会陌生 在实现小程序微信原装的tabbar却比较呆板,不够精致,往往不符合自己的要求
-
这个时候怎么办呢
这套方案接着!
先简单的来说一下主要思想:
自定义字体图标组件以及tabbar组件,在tabbar中引用自定义字体图标组件。
先说一下这套方案的优点:
- 图片换成字体,体积小,请求减少,性能提高
- 自己定义tabbar,能够从细节各方面达到自己的要求,精确到1像素
- 组件可以根据自己的条件来更换tabbar图标(比如你点进一个页面想把这个页面的tabbar样式自己更换) 总而言之就是自由性很大,精准性良好,能够去随心所欲的打造你的专属tabbar!
实现这套方案核心还是自定义组件
那就从这开始聊:
一个自定义组件由 json wxml wxss js 4个文件组成。
- 一个页面要引用一个组件时只需要在该页面的json配置下添加如下
{
//声明引用一个组件 配置好你的组件引用路径
"usingComponents": {
"icon": "../../components/icon/index"
}
}
复制代码
- 然后再页面上添加组件的标签即可。
//这样就能够在你的页面中添加组件 <icon type="" color="" size=""/> 复制代码
如果对于组件的定义仍有疑惑的可以参考这份文档: 官方关于自定义组件的文档
OK 下面我们正式来讲这份方案:
- 先定义字体图标组件,在阿里图标库里面挑选好你所需要的字体选择下载代码。
这里我选择的是其中的_fontclass方案, - 把iconfont.css内的内容拷贝到你创建的icon目录下的index.wxss
3. 将该目录下index.json添加
{
//声明这一组文件设为自定义组件
"component": true,
"usingComponents": {}
}
复制代码
- 在index.wxml中定义该组件的结构
<!-- 注意style里面的分号! -->
<text class="iconfont icon-{{type}}" style="color:{{color}}; font-size:{{size}}rpx" ></text>
复制代码
- 在js里面配置他的属性
//这里定义了3个自定义属性他们通过{{}}与wxml中的数据连接起来
Component({
properties: {
type: {
type: String,
value: ''
},
color: {
type: String,
value: '#000000'
},
size: {
type: Number,
value: '45'
}
}
})
复制代码
到此,字体图标组件搞定。
现在开始第二步,搞定tabbar组件。
- 首先做在json中添加配置
{
"component": true,
//声明对字体图标组件的引用
"usingComponents": {
"icon": "../../components/icon/index"
}
}
复制代码
- 写wxml结构
<view class="weibo-tabbar" >
//绑定回首页事件,此处的data-hi中的数据是为了传递到e.currentTarget.dataset.hi
//通过这个数据我们可以用来判断是否处于首页,然后在js中配置可以阻扰原地跳转
<view class="item-left" bindtap="goHome" data-hi="{{isIndex}}">
<icon type="shouye" color="{{isIndex?'#000000':'#b1b1b1'}}" size="45"/>
<text class="1" style="color:{{isIndex?'#000000':'#b1b1b1'}}">首页</text>
</view>
<block wx:if="{{isInner}}">
<view class="item-right" style="color:#b1b1b1" bindtap="goShare">
<icon type="fenxiang" color="gray" size="45"/>
<text class="2">分享</text>
</view>
</block>
<block wx:else>
<view class="item-right" bindtap="goInfo" data-hi="{{isIndex}}">
<icon type="wode" color="{{isIndex?'#b1b1b1':'#000000'}}" size="45"/>
<text class="2" style="color:{{isIndex?'#b1b1b1':'#000000'}}">我的</text>
</view>
</block>
</view>
复制代码
- 再配置js属性及方法
const app = getApp();
Component({
properties: {
isIndex: { // 是否主页
type: Boolean,
value: false,
},
isInner: { //是否内部页面
type: Boolean,
value: false,
},
},
data: {
// 这里是一些组件内部数据
someData: {}
},
methods: {
// 这里是一个自定义方法
goHome: (e) => {
// 判断是否为主页面防止原地跳转
if(!e.currentTarget.dataset.hi){
wx.redirectTo({
url: "/pages/index/index"
})
}
},
goShare: function () {
},
goInfo: (e) => {
if(e.currentTarget.dataset.hi){
wx.redirectTo({
url: "/pages/info/info"
})
}
}
}
})
复制代码
- 配置样式wxss
.weibo-tabbar {
bottom: 0;
height: 97rpx;
padding: 12rpx 0rpx;
display: flex;
width: 100%;
position: fixed;
background: #ffffff;
box-sizing: border-box;
}
//产生优雅的0.5px边框
.weibo-tabbar::after {
content: "";
position: absolute;
width: 200%;
height: 200%;
top: 0;
left: 0;
border-top: 1rpx solid rgba(177, 177, 177, 0.4);
transform: scale(0.5);
transform-origin: 0 0;
}
//这里用flex布局,移动端flex布局确实很爽
.weibo-tabbar .item-left, .item-right{
//这里有一处坑,若不不设置他的层级变大的话
//你是点不到这个item按钮的,当然也不会产生触碰事件
z-index: 999;
width: 50%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
font-size: 20rpx;
color: #b1b1b1;
}
.shouye, .wode {
height: 45rpx;
width: 45rpx;
}
复制代码
到此你只需要在你的页面优雅的添加一行,就能在你的页面中产生tabbar
//此处isIndex是给组件的属性传输值,别属性不添加即为默认属性值 <tabbar isIndex="true"></tabbar> 复制代码
结果:
哇,看了半天就出这么一个小东西!
其实大道至简
掌握这套方案能够适配你需要的所有tabbar
他的颜色、大小、位置都可以自己掌控,重要的是这个解决方案。
最后强调一下里面的一些坑
- 按钮的样式层级z-index要提高
- 属性值与{{}}传输的把握
- style="color:{{color}}; font-size:{{size}}" 注意里面的;号
以上所述就是小编给大家介绍的《小程序tabbar这套方案全搞定!》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 搞定了微信小程序富文本渲染解决方案-后端渲染方案Html2Wxml2J 原 荐
- 轻松搞定RocketMQ入门
- 索引,一文搞定
- 十分钟搞定pandas
- 一次性搞定 Iconfont
- 简单搞定Nginx日志分割
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Programming in Haskell
Graham Hutton / Cambridge University Press / 2007-1-18 / GBP 34.99
Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduc......一起来看看 《Programming in Haskell》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
图片转BASE64编码
在线图片转Base64编码工具