小程序tabbar这套方案全搞定!

关于微信小程序的tarbar,相信你们都不会陌生 在实现小程序微信原装的tabbar却比较呆板,不够精致,往往不符合自己的要求

  • 这个时候怎么办呢
    这套方案接着!

先简单的来说一下主要思想:
自定义字体图标组件以及tabbar组件,在tabbar中引用自定义字体图标组件。

先说一下这套方案的优点:

  1. 图片换成字体,体积小,请求减少,性能提高
  2. 自己定义tabbar,能够从细节各方面达到自己的要求,精确到1像素
  3. 组件可以根据自己的条件来更换tabbar图标(比如你点进一个页面想把这个页面的tabbar样式自己更换) 总而言之就是自由性很大,精准性良好,能够去随心所欲的打造你的专属tabbar!

实现这套方案核心还是自定义组件

那就从这开始聊:
一个自定义组件由 json wxml wxss js 4个文件组成。

  • 一个页面要引用一个组件时只需要在该页面的json配置下添加如下
{
//声明引用一个组件 配置好你的组件引用路径"usingComponents": {"icon": "../../components/icon/index"}
}
  • 然后再页面上添加组件的标签即可。
//这样就能够在你的页面中添加组件
<icon type="" color="" size=""/>

如果对于组件的定义仍有疑惑的可以参考这份文档: 官方关于自定义组件的文档



OK 下面我们正式来讲这份方案:

  1. 先定义字体图标组件,在阿里图标库里面挑选好你所需要的字体选择下载代码。
    这里我选择的是其中的_fontclass方案,
  2. 把iconfont.css内的内容拷贝到你创建的icon目录下的index.wxss

3. 将该目录下index.json添加

{  
//声明这一组文件设为自定义组件"component": true,"usingComponents": {}
}
  1. 在index.wxml中定义该组件的结构
<!-- 注意style里面的分号! -->
<text class="iconfont icon-{{type}}" style="color:{{color}}; font-size:{{size}}rpx" ></text>
  1. 在js里面配置他的属性
//这里定义了3个自定义属性他们通过{{}}与wxml中的数据连接起来Component({properties: {type: {type: String,value: ''},color: {type: String,value: '#000000'},size: {type: Number,value: '45'}}
})

到此,字体图标组件搞定。

现在开始第二步,搞定tabbar组件。

  1. 首先做在json中添加配置
 {"component": true,//声明对字体图标组件的引用"usingComponents": {"icon": "../../components/icon/index"}
}
  1. 写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>
  1. 再配置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"})}}}
})
  1. 配置样式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
他的颜色、大小、位置都可以自己掌控,重要的是这个解决方案。


最后强调一下里面的一些坑
  1. 按钮的样式层级z-index要提高
  2. 属性值与{{}}传输的把握
  3. style="color:{{color}}; font-size:{{size}}" 注意里面的;号

觉得不错的话可以点个赞鼓励一下哟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux服务器用哪个面板好,Linux服务器管理面板哪家比较好用?

Linux服务器管理面板哪家比较好用&#xff1f;发布时间&#xff1a;2020-07-21 06:08:33来源&#xff1a;51CTO阅读&#xff1a;261作者&#xff1a;BirdCloud_1022现在&#xff0c;越来越多的站长朋友都会选择服务器用来搭建网站&#xff0c;但是势必需要我们自己搭建WEB环境&…

spring boot(一)入门

目录 spring boot(一)入门一、简介1、微服务的概念2、什么是spring boot3、快速入门4.springboot的快捷部署spring boot(一)入门 一、简介 1、微服务的概念 说起spring boot&#xff0c;我们不得不说一下“微服务”一词的兴起&#xff0c;微服务一词最早起源于2014年&#xff0…

Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识

首先从linux dmesg来认识usb:<6>[ 19.610046] msm_hsic_host msm_hsic_host: Qualcomm EHCI Host Controller using HSIC<6>[ 19.620391] msm_hsic_host msm_hsic_host: new USB bus registered, assigned bus number 1<6>[ 19.659942] msm_hsic_host …

Spring面试问题

还可以查看我们最新的文章69Spring面试问答-最终名单 。 1&#xff09;什么是春天&#xff1f; 回答&#xff1a; Spring是控件和面向方面的容器框架的轻量级转换。 2&#xff09;解释春天&#xff1f; 回答&#xff1a; 轻巧&#xff1a;在尺寸和透明度方面&#xff0c; S…

201771010120 苏浪浪 《面向对象程序设计(java)》第二周学习总结

理论知识总结 第三章Java基本程序设计结构 1、基本知识&#xff1a;&#xff08;1&#xff09;标识符&#xff1a;是由字母、下划线、美元符号和数字组成&#xff0c;且第一个符号不能为数字。&#xff08;2&#xff09;关键字&#xff1a;剧啊语言中被赋予特定意义的一些单词。…

Apache Camel简介

Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎&#xff0c;可以帮助开发人员以各种领域特定语言&#xff08;DSL&#xff09;&#xff08;例如Java&#xff0c;Spring / XML&#xff0c;scala等&#xff09;创建路由和中介规则。 骆驼用途广泛 Cam…

qt结构体嵌套结构体方法_9.2 C++结构体类型变量

C定义结构体类型变量的方法 1、先声明结构体类型再定义变量名&#xff0c;在定义了结构体变量后&#xff0c;系统会为之分配内存单元。struct Student{ //自定义结构体变量int num;//学号char sex;//性别int age;//年龄};2、在声明类型的同时定义变量 一般形式为struct 结构体名…

Vue解析--如何应对面试官提问

近期不断面试中&#xff0c;面试官都会提一些关于Vue相关的源码和“全家桶”之类的问题。那么针对这些提问&#xff0c;我们应该如何更好应答呢&#xff1f;在这里我把对Vue的理解整理出来供大家来参考。 1.Vue是什么&#xff1f; Vue是一套构建用户界面的渐进式框架&#xf…

Java开发人员的Erlang

您可能没有注意到&#xff0c;但是距离我上次发布博客已经过去了几个星期。 原因是我的Soleus骨折了&#xff0c;而我的腿也石膏了。 不能动弹&#xff0c;我认为调查完全不同的东西是个好主意–要么看那天的电视&#xff0c;要么&#xff0c;尽管Kojak和Magnum PI的重播很诱人…

20165339第六周学习总结

课本知识点总结 第八章 String类 使用String类声明对象并创建对象 String s new String("We are students"); String t new String("We are students"); String (char a[])用一个字符数组a创建一个String对象 char a[] {J,a,v,a}; String s new String(a)…

keil5用jlink不到芯片_洛达芯片检测

安卓手机下载一个络达官方的刷机软件然后连接上耳机&#xff0c;打开软件&#xff0c;就可以看到耳机芯片的相关信息。软件下载地址&#xff1a;https://pan.baidu.com/s/1MOXjkHv1wfxWWIVdcsMSFg 提取码: tasc我们的耳机都是络达芯片&#xff0c;不怕你检测&#xff0c;希望用…

层次和约束:项目中使用vuex的3条优化方案

问题描述 使用vuex的store的过程中&#xff0c;发现了一些不是很优雅的地方&#xff1a; store层module太多&#xff0c;找state、getter、mutation、action对应的module比较慢。 组件里面mapGetters、mapActions、mapMutations过多&#xff0c;分不清getter、action、mutati…

怎么让员工服从管理_为什么现在的员工执行力和服从性越来越差,管理一严格就辞职?...

当有负面情绪的时候&#xff0c;不要说。管好自己的嘴&#xff0c;有时候做哑巴&#xff0c;是一种境界。现在的企业很多都存在这个问题&#xff0c;员工执行力越来越差&#xff0c;服从性也越来越差&#xff0c;管理者稍微一严格&#xff0c;员工就会辞职走人&#xff0c;留不…

Spring Data REST的实际应用

什么是春天数据休息&#xff1f; spring-data-rest是spring-data项目的新增功能&#xff0c;它是一个框架&#xff0c;可帮助您将实体直接作为RESTful Web服务端点公开。 与rails&#xff0c;grails或roo不同&#xff0c;它不会生成任何实现此目标的代码。 spring data-rest支持…

2018上半年掘金微信群日报优质文章合集:前端篇

在掘金微信交流群里的小伙伴们&#xff0c;你们每天都还在坚持读小报吗&#xff1f;如果你的回答是yes&#xff0c;那真的要给你点一万个赞了?能坚持这么久&#xff0c;真的很优秀噢&#xff01;&#xff08;嗯&#xff0c;每天坚持给大家收集文章的小饼也很优秀?&#xff09…

linux运维笔试题目,linux运维相关的笔试题目_笔试题目

一、Linux系统和shell1、写一个sed命令&#xff0c;修改/tmp/input.txt文件的内容&#xff0c;要求&#xff1a;①删除所有空行&#xff1b;②在非空行前面加一个“AAA”&#xff0c;在行尾加一个“BBB”&#xff0c;即将内容为“11111”的一行改为&#xff1a;“AAA11111BBB”…

python之路--day17-shelve,xml和re模块

shelve模块 shelve模块只有一个open函数&#xff0c;返回类似字典的对象&#xff0c;可读可写&#xff0c;key必须为字符串&#xff0c;而值可以是python所支持的数据类型 1 import shelve2 # info1{age:18,height:180,weight:80}3 # info2{age:73,height:150,weight:80}4 #5 #…

20172314 2018-2019-1《程序设计与数据结构》第一周学习总结

教材学习内容总结 概述 软件工程&#xff1a;是一门关于高质量软件开发的技术和理论的学科&#xff0c;用来控制开发过程&#xff0c;实现高质量的软件。软件工程的目标&#xff1a;正确性、可靠性、健壮性、可用性、可维护性、可重用性、可移植性、运行效率。 对于可靠性和健壮…

activiti api文档_【白银人机】Activiti 工作流从入门到入土:完整 hello world 大比拼(API 结合实例讲解)...

点击上方“好好学java”&#xff0c;选择“置顶”公众号重磅资源、干货&#xff0c;第一时间送达重磅推荐 ① 纯福利 | 公众号资源大汇总&#xff0c;一年才一次&#xff01;② 重磅&#xff01;&#xff01;2018年Java全套入门到进阶学习视频及项目实战③ 2018年java架构师学习…

前端解读控制反转(IOC)

前言 随着前端承担的职责越来越重&#xff0c;前端应用向着复杂化、规模化的方向发展。大型项目模块化是一种趋势&#xff0c;不可避免模块之间要相互依赖&#xff0c;此外还有很多第三方包。这样的话如何去管理这些繁杂的文件&#xff0c;是一个不可避免的话题。此时作为一种…