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滚动特效集锦
Jun 03 Javascript
简单封装js的dom查询实例代码
Jul 08 Javascript
使用Xcache缓存器加速PHP网站的配置方法
Apr 22 Javascript
微信小程序 实例开发总结
Apr 26 Javascript
ES6中Array.includes()函数的用法
Sep 20 Javascript
js判断数组是否包含某个字符串变量的实例
Nov 24 Javascript
解决iview打包时UglifyJs报错的问题
Mar 07 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
Jul 03 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
Jan 15 Javascript
vue-router实现嵌套路由的讲解
Jan 19 Javascript
详解如何修改 node_modules 里的文件
May 22 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&amp;&amp;mysql)六
2006/10/09 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
php post换行的方法
2020/02/03 PHP
Document对象内容集合(比较全)
2010/09/06 Javascript
JavaScript高级程序设计 阅读笔记(十三) js定义类或对象
2012/08/14 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
浅析JavaScript原型继承的陷阱
2013/12/03 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
原生JS下拉加载插件分享
2016/12/26 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
React Native中Navigator的使用方法示例
2017/10/13 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
微信小程序自定义toast的实现代码
2018/11/16 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
Python基础知识点 初识Python.md
2019/05/14 Python
详解Python Celery和RabbitMQ实战教程
2021/01/20 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
个人自我评价和职业目标
2014/01/24 职场文书
机电一体化求职信
2014/03/10 职场文书
保安公司服务承诺书
2014/05/28 职场文书
教师个人读书活动总结
2014/07/08 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
2014年路政工作总结
2014/12/10 职场文书
安全教育培训制度
2015/08/06 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL