ionic2 tabs 图标自定义实例


Posted in Javascript onMarch 08, 2017

一、准备资源

tabs icon 的svg格式的矢量图片

ionic2 tabs 图标自定义实例

二、生成字体样式文件

打开icoMoon网站去制作字体文件。

ionic2 tabs 图标自定义实例

ionic2 tabs 图标自定义实例

ionic2 tabs 图标自定义实例

三、使用字体文件

解压下载的文件,将其中的fonts文件夹拷贝到ionic2项目的src/assest目录下。并且将其目录下的styles.css文件命名为wecare.scss(这个名称是你字体的文件名称),再将其拷贝到ionic2项目的src/assest/fonts目录下。下来我们去修改wecare.scss文件。

修改@font-face中的引用地址。

$font-path: '../assets/fonts';
@font-face {
 font-weight: normal;
 font-style: normal;
 font-family: 'wecare';
 src: url('#{$font-path}/wecare.eot?l80w4l');
 src: url('#{$font-path}/wecare.eot?l80w4l#iefix') format('embedded-opentype'),
 url('#{$font-path}/wecare.ttf?l80w4l') format('truetype'),
 url('#{$font-path}/wecare.woff?l80w4l') format('woff'),
 url('#{$font-path}/wecare.svg?l80w4l#wecare') format('svg');
}

修改字体的公共样式部分的选择器

原代码

[class^="ion-"], [class*=" ion-"] {
   /* use !important to prevent issues with browser extensions that change fonts */
   font-family: 'wecare' !important;
   speak: none;
   font-style: normal;
   font-weight: normal;
   font-variant: normal;
   text-transform: none;
   line-height: 1;
   /* Better Font Rendering =========== */
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
}

修改后

.wecare {
   text-transform: none;
   font-weight: normal;
   font-style: normal;
   font-variant: normal;
   font-family: 'wecare' !important;
   line-height: 1;
   /* Better Font Rendering =========== */
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
   speak: none;
  }
  .ion-ios-smart-outline:before, 
  .ion-ios-smart:before, 
  .ion-md-smart-outline:before, 
  .ion-md-smart:before, 
  .ion-ios-test-outline:before, 
  .ion-ios-test:before, 
  .ion-md-test-outline:before, 
  .ion-md-test:before {
   @extend .wecare;
  }

注:将一个通用的选择器改为一个类,然后让被应用的类去继承,是因为使用[class^="ion-"], [class*=" ion-"] 来选择时会影响到ionic2自带的图标库,这也是ionic2字体库的写法。

字体的引用

.ion-ios-smart-outline:before {
 content: '\e904';
}
.ion-ios-smart:before {
 content: '\e905';
}
.ion-md-smart-outline:before {
 content: '\e904';
}
.ion-md-smart:before {
 content: '\e905';
}
.ion-ios-test-outline:before {
 content: '\e900';
}
.ion-ios-test:before {
 content: '\e901';
}
.ion-md-test-outline:before {
 content: '\e900';
}
.ion-md-test:before {
 content: '\e901';
}

注:在ionic2中引用图标主要靠名称来引用,它会根据Platform自动添加前缀如ios或android(.ion-ios-smart.ion-md-smart),所以我们必须为ios与android各写一个类名,其中像.ion-ios-test-outline这种是tab未被选中时的样式。

将我们的sass文件导入src/theme/variables.scss ,然后就可以在tabs中使用了。

@import '../assets/fonts/wecare';
<ion-tabs>
 <ion-tab [root]="tab1Root" tabTitle="Now" tabIcon="test"></ion-tab>
 <ion-tab [root]="tab2Root" tabTitle="Assessment" tabIcon="information-circle"></ion-tab>
 <ion-tab [root]="tab3Root" tabTitle="Trends" tabIcon="contacts"></ion-tab>
 <ion-tab [root]="tab4Root" tabTitle="Smart" tabIcon="smart"></ion-tab>
 <ion-tab [root]="tab5Root" tabTitle="Settings" tabIcon="contacts"></ion-tab>
</ion-tabs>

四、解决android中icon只能使用一张icon的问题

在ionic2中android的tab图标选中与未选中只能使用一张svg图片,只是颜色不同。如果我们想要像在ios中一样选中与未选中使用不同的icon,就不能办到。我们的项目的需求就是这样,我不得已只能去看ionic2关于tabs与tab的源码,找到解决问题的方法。我们应该知道在ios中它是通过-outline的后缀来控制显示未选中的icon。起初我看了tabs与tab的源码,没有找到关于这个问题的部分。最后在icon的源码中找到了关于这个问题的部分代码。

if (iconMode === 'ios' && !this._isActive && name.indexOf('logo-') < 0 && name.indexOf('-outline') < 0) {
     name += '-outline';
  }

它是判断是否是ios与 !this._isActive时给icon的name添加-outline后缀。但是我们也不能去改源码,因为如果以后升级会覆盖。

但是天无绝人之路,在tab的api中提供了一个被选中时调用的方法,我们通过这个方法来改变icon。下面是代码

<ion-tabs>
 <ion-tab [root]="tab1Root" (ionSelect)="change(0)" tabTitle="Now" tabIcon="{{test[0]}}"></ion-tab>
 <ion-tab [root]="tab2Root" (ionSelect)="change(1)" tabTitle="Assessment" tabIcon="information-circle"></ion-tab>
 <ion-tab [root]="tab3Root" (ionSelect)="change(2)" tabTitle="Trends" tabIcon="contacts"></ion-tab>
 <ion-tab [root]="tab4Root" (ionSelect)="change(3)" tabTitle="Smart" tabIcon="{{test[3]}}"></ion-tab>
 <ion-tab [root]="tab5Root" (ionSelect)="change(4)" tabTitle="Settings" tabIcon="contacts"></ion-tab>
</ion-tabs>
test: Array<string> = ["test", "", "", "smart", ""];
change(a: number) {
  if (this.platform.is("android")) {
   for (let i = 0; i < 5; i++) {
    if (i === a) {
     this.test[i] = this.test[i].split("-")[0];
    } else {
     this.test[i] = this.test[i].split("-")[0] + "-outline";
    }
   }
  }
}

五、最后来看一下效果

ionic2 tabs 图标自定义实例

以上所述是小编给大家介绍的ionic2 tabs 图标自定义实例,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于jquery的网页SELECT下拉框美化代码
Oct 28 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
Apr 21 Javascript
node.js操作mongoDB数据库示例分享
Nov 26 Javascript
jQuery中unwrap()方法用法实例
Jan 16 Javascript
jQuery Validate验证框架经典大全
Sep 23 Javascript
js构建二叉树进行数值数组的去重与优化详解
Mar 26 Javascript
实例解析Vue.js下载方式及基本概念
May 11 Javascript
vue搜索和vue模糊搜索代码实例
May 07 Javascript
使用typescript构建Vue应用的实现
Aug 26 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
Nov 06 Javascript
解决vue 使用axios.all()方法发起多个请求控制台报错的问题
Nov 09 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 #Javascript
jQuery实现图片滑动效果
Mar 08 #Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 #Javascript
JS实现根据密码长度显示安全条功能
Mar 08 #Javascript
jquery实现自定义图片裁剪功能【推荐】
Mar 08 #Javascript
bootstrap实现动态进度条效果
Mar 08 #Javascript
jquery实现超简单的瀑布流布局【推荐】
Mar 08 #Javascript
You might like
在同一窗体中使用PHP来处理多个提交任务
2008/05/08 PHP
基于PHP实现的事件机制实例分析
2015/06/18 PHP
实例简介PHP的一些高级面向对象编程的特性
2015/11/27 PHP
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
JS中判断某个字符串是否包含另一个字符串的五种方法
2018/05/03 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
vue内置组件transition简单原理图文详解(小结)
2018/07/12 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
Python 调用VC++的动态链接库(DLL)
2008/09/06 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
Django的CVB实例详解
2020/02/10 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
Django框架models使用group by详解
2020/03/11 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
YOINS官网:时尚女装网上购物
2017/03/17 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
法学毕业生自荐信
2013/11/13 职场文书
大学军训感言1500字
2014/03/09 职场文书
2015年全民创业工作总结
2015/07/23 职场文书
升学宴来宾致辞
2015/07/27 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书