uni-app 使用 iconfont 图标 自定义图标
<p> </p><p>uni-app 的uni-ui 的 Icon 图标组件,裡面的图标只是移动端常见的图标,对于一些其他需求所要显示的图标,这个是完全不够用。那么怎么办?模仿它的组件,用阿里巴巴图标矢量库的图标,自己定义一个图标组件呀。</p>
<p>一、uni-app 图标组件</p>
<p>1、组件文件m-icon里面有两个文件,一个是m-icon.css文件一个是m-icon.vue文件</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814184730486-1352034806.png"></p>
<p>2、m-icon.css</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814185231929-1481022024.png"></p>
<p>3、m-icon.vue</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814185415002-249885726.png"></p>
<p>4、使用</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814185651094-1010324991.png"></p>
<p>上面就是uni-app 官网的例子。接下来我们就参考这个自己写一个组件。</p>
<p>二、新建组件</p>
<p>1、uni-icon ,里面有uni-icon.css 和uni-icon.vue 两个文件</p>
<p>uni-icon.css</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">@font-face </span>{<span style="color: rgba(255, 0, 0, 1)">
font-family</span>:<span style="color: rgba(0, 0, 255, 1)"> uniicons</span>;<span style="color: rgba(255, 0, 0, 1)">
font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> normal</span>;<span style="color: rgba(255, 0, 0, 1)">
font-style</span>:<span style="color: rgba(0, 0, 255, 1)"> normal</span>;
<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)"> 暂时先用官网的url </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(255, 0, 0, 1)">
src</span>:<span style="color: rgba(0, 0, 255, 1)">url('https://at.alicdn.com/t/font_1328537_gk9yl0aa13q.ttf') format('truetype')</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.icon </span>{<span style="color: rgba(255, 0, 0, 1)">
font-family</span>:<span style="color: rgba(0, 0, 255, 1)"> uniicons</span>;<span style="color: rgba(255, 0, 0, 1)">
font-size</span>:<span style="color: rgba(0, 0, 255, 1)"> 48upx</span>;<span style="color: rgba(255, 0, 0, 1)">
font-weight</span>:<span style="color: rgba(0, 0, 255, 1)"> normal</span>;<span style="color: rgba(255, 0, 0, 1)">
font-style</span>:<span style="color: rgba(0, 0, 255, 1)"> normal</span>;<span style="color: rgba(255, 0, 0, 1)">
line-height</span>:<span style="color: rgba(0, 0, 255, 1)"> 1</span>;<span style="color: rgba(255, 0, 0, 1)">
display</span>:<span style="color: rgba(0, 0, 255, 1)"> inline-block</span>;<span style="color: rgba(255, 0, 0, 1)">
text-decoration</span>:<span style="color: rgba(0, 0, 255, 1)"> none</span>;<span style="color: rgba(255, 0, 0, 1)">
-webkit-font-smoothing</span>:<span style="color: rgba(0, 0, 255, 1)"> antialiased</span>;
}<span style="color: rgba(128, 0, 0, 1)">
.icon.uni-active </span>{<span style="color: rgba(255, 0, 0, 1)">
color</span>:<span style="color: rgba(0, 0, 255, 1)"> #007aff</span>;
}</pre>
</div>
<p>uni-icon.vue</p>
<pre><span style="font-size: 15px">:class="['icon-'+type]"对应uni-icon.css 里面的 .icon-scan:before {<br> content: "\e638";<br>}<br><br></span></pre>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">view </span><span style="color: rgba(255, 0, 0, 1)">class</span><span style="color: rgba(0, 0, 255, 1)">="icon"</span><span style="color: rgba(255, 0, 0, 1)"> :class</span><span style="color: rgba(0, 0, 255, 1)">="['icon-'+type]"</span><span style="color: rgba(255, 0, 0, 1)"> :style</span><span style="color: rgba(0, 0, 255, 1)">="{color:color,'font-size':fontSize,'background':background}"</span><span style="color: rgba(255, 0, 0, 1)"> @click</span><span style="color: rgba(0, 0, 255, 1)">="onClick()"</span><span style="color: rgba(0, 0, 255, 1)">></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">template</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
export </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">default</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> {
props: {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">/*</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*
* 图标类型
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*/</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
type: String,
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">/*</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*
* 图标颜色
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*/</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
color: String,
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">/*</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*
* 图标背景颜色
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*/</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
background: String,
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">/*</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*
* 图标大小
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 128, 0, 1)">*/</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
size: {
type: ,
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">default</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">: </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">24</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">
}
},
computed: {
fontSize() {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">var</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> size </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> Number(</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.size)
size </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">=</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> isNaN(size) </span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">?</span> <span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">24</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> : size
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">return</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)"> `${size}px`
}
},
methods: {
onClick() {
</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 255, 1)">this</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">.$emit(</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">click</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">'</span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(0, 0, 0, 1)">)
}
}
}
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 0, 255, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span><span style="background-color: rgba(245, 245, 245, 1); color: rgba(128, 0, 0, 1)">
@import "./u-icon.css";
</span><span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">style</span><span style="color: rgba(0, 0, 255, 1)">></span></pre>
</div>
<p>这里其实可以看出,其实就是和官网的一样,只是换了一下名字。</p>
<p>接下来就是把阿里巴巴图标加进来</p>
<p>三、阿里巴巴图标矢量库</p>
<p>1、注册一个阿里巴巴图标矢量库账号</p>
<p>2、选择自己想要的图标,加入购物车;然后把购物车里面的图标添加至你的项目里面。</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814190600934-951885213.png"></p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814190840846-1167974409.png"></p>
<p>3、在我的项目中,下载文件,然后解压,找到iconfont.css文件夹,将里面的【***:before】 全部复制到你现有的工程项目里。</p>
<p> 我们先看看iconfont.css是怎样的</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814193047558-959572933.png"></p>
<p>uni-icon.css</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814193513670-1153958209.png"></p>
<p>这里有一个要注意的点</p>
<p>iconfont.css 里面的 </p>
<p>.icon-scan:before {<br> content: "\e638";<br>}</p>
<p>刚好是.icon前缀和我定义的uni-icon.css 里面的.icon 前缀名字相同,所以直接复制粘贴就可以了。如果我定义的是.uni-icon前缀 的话,那么这个时候uni-icon.css 复制进来的</p>
<p>.icon-scan:before {<br> content: "\e638";<br>} </p>
<p>就要改成</p>
<p>.uni-icon-scan:before {<br> content: "\e638";<br>}</p>
<p>4、还差一步,就是src的url</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814194501420-304555162.png"></p>
<p>将Unicode只要复制.ttf的那个url 添加到uni-app 项目中添加https</p>
<p>uni-icon.css 最终版</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@font-face {
font-family: uniicons;
font-weight: normal;
font-style: normal;
src:url('https://at.alicdn.com/t/font_1302625_v83rvydxjyo.ttf') format('truetype'); //更新这里
}
.icon {
font-family: uniicons;
font-size: 48upx;
font-weight: normal;
font-style: normal;
line-height: 1;
display: inline-block;
text-decoration: none;
-webkit-font-smoothing: antialiased;
}
.icon.uni-active {
color: #007aff;
}
/* 加进来的图标 */
.icon-scan:before {
content: "\e638";
}</span></pre>
</div>
<p> 就可以正常使用啦</p>
<p>5、如果后续还有要加入其它的图标呢?</p>
<p>重复上面1、2两步</p>
<p>然后点击更新 Unicode ,将更新后的.ttf的那个url 更新到uni-icon.css 中</p>
<p>最后点击图标 编辑</p>
<p><img src="https://img2018.cnblogs.com/blog/1202901/201908/1202901-20190814195311665-1909132931.png"></p>
<p> </p>
<p>在uni-icon.css 中加入 </p>
<p>.icon-people_fill:before { <br>content: "\e601";<br>}</p>
<p>就可以啦 。不需要重新下载解压</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/qiu-Ann/p/11354095.html
頁:
[1]