搜尋
首頁微信小程式小程式開發淺析小程式中怎麼實現Icon圖示?

小程式中怎麼實作Icon圖示?以下這篇文章跟大家分享小程式Icon圖示的幾種實作方案,希望對大家有幫助!

淺析小程式中怎麼實現Icon圖示?

小程式原生提供的#Icon元件

屬性
屬性 類型 預設值 必填 說明
#type string
#是 icon的類型,有效值:success, success_no_circle, info, warn, waiting, cancel, download, search, clear
size number/string ##23 icon的大小
color string
icon的顏色,同css的color
說明
元件size屬性的長度單位預設為px,2.4.0起支援傳入單位( rpx/px)
  • PX 數值類型,預設使用,什麼單位都不填,只寫一個數值就可以

  • RPX(Responsive Pixel)螢幕自適應單位,他將螢幕分為750個單位,每個單位是1/750。 【相關學習推薦:小程式開發教學

淺析小程式中怎麼實現Icon圖示?

比方說:iphone6的螢幕寬度是350px,每個rpx就是0.5px。也就是說如果我們在iphone6機器上將size的值設定為60rpx,他與設定為30或30px的效果是一樣的。

元件color屬性是改變圖示所有像素點的顏色

#常見問題

圖示與文字能否放在同一行?

可以的,圖示本身就是為了更好的佈局和更方便使用而誕生的。程式碼如下:

<view style="font-size: 17px;margin-top: 20px;">
    我是一行文字,<icon type="success" size="15"></icon>我里面包含了图标!
</view>
有時候真機上Icon顯示空白

首先此問題肯定不是由於字體檔案連結沒有加入小程式的安全域名,WXSS載入圖片及字體允許外域!如果圖示是自訂實現的,要檢查一下機型及嵌入的字體檔案類型,可能是相容性引起的,在小程式中推薦使用TTF和WOFF格式的字體。如果使用的是這兩種字體,情況依然存在,可以考慮換SVG格式的資料嵌入。

weui元件庫裡的icon元件的圖示如何取出來,儲存在本機?

直接可以開啟 weui官網(https://weui.io/),然後透過瀏覽器開發者工具查看原始碼,找到資源位址然後下載。或在微信的官方文件上下載(https://developers.weixin.qq.com/miniprogram/design/#圖示)。

優點

開箱即用。

缺點

只支援success, success_no_circle, info, warn, waiting, cancel, download, search, clear這幾種類型,遠遠無法滿足開發需求。

自訂實作圖示

直接使用圖片

優點

  • #簡單粗暴,每個圖示對應一個圖片。

  • 缺點

  • 圖片在文字中不方便佈局。不方便修改顏色。

  • 圖片不能升縮,放大之後會變虛、有鋸齒。

圖片需要在本地或網路上存儲,這將導致大量HTTP請求,使得頁面載入速度變慢。

使用起來不如圖示只使用一個名稱方便。

淺析小程式中怎麼實現Icon圖示?

使用精靈圖
Sprite,連續圖片集,以非重疊、最小化分佈的方式排列成一張圖片。每次使用的時間透過縱橫顯示的起始座標及區域大小,以達到動態切換的效果。

使用範例

透過精靈圖實作一個爆炸效果。圖片大小為(650x650) px;所以每個小圖示大小為(130x130)px;這是css樣式設定的width和height為130px的原因,也是js程式移動step設定為130的原因。 js中left和top皆為負數,這是由於這裡不是顯示圖示的座標,而是背景圖片所要向左上方移動的距離。
注意:在wxss中只可以使用網路圖片,不能使用本機圖片!
  • 程式碼如下:

    <!--icon.wxml-->
    <view>
    <icon class="sprite scale" style="background-position: {{left}} {{top}};"></icon>
    </view>
    /* icon.wxss */
    .sprite{
        display: block;
        width: 130px;
        height: 130px;
        background: url("https://i.loli.net/2021/11/15/7BH5gdkbLynrfM3.png") no-repeat;
    }
    .scale{
        transform-origin: 0 0 0;
        transform: scale(2,2);
    }
    // icon.js
    Page({
    
        /**
         * 页面的初始数据
         */
        data: {
            left:&#39;0px&#39;,
            top:&#39;0px&#39;,
        },
    
        /**
         * 生命周期函数--监听页面加载
         */
        onLoad: function () {
            var that = this;
            var left = 0;
            var top = 0;
            const step = 130;
            const stop = (650-130);
            var i = setInterval(function() {
                 if (left >= stop && top >=stop) {
                      clearInterval(i)
                 } else {
                    left += step;
                    if(left >= 650){
                        left = 0;
                        top += step;
                    }
                    that.setData({
                        left: &#39;-&#39; + left +&#39;px&#39;,
                        top: &#39;-&#39; + top +&#39;px&#39;
                      })
                 }
            }, 100)
        },
    })
優點

在載入的時候,只載入一次。減少了HTTP請求。
使用CSS樣式繪製
  • #使用範例

    <view>
        <icon class="icon-close"></icon>
    </view>
    .icon-close{
        display: inline-block;
        width: 17px;
        height: 2px;
        background: red;
        transform: rotate(45deg);
    }
    .icon-close::after {
        content: &#39;&#39;;
        display: block;
        width: 17px;
        height: 2px;
        background: red;
        transform: rotate(-90deg);
    }
  • 缺點

  • 每個圖示都需要寫CSS樣式程式碼,勞動量大。

    #########這種圖示不是字符,每個圖示在繪製時要統一一個中心點,不然使用起來控制位置會比較麻煩。 ############大小與顏色也不方便控制。所以這並不是一種好的圖標方案。 ###

使用矢量字体 (推荐使用)

当浏览器渲染一个字符的时候,首先看font-family样式,确定使用字体名是哪一个。接着以此字符的Unicode在字体文件里查找对应的字符信息。

字体类型有两种,一种是点阵字体,一种是矢量字体。现在使用最广泛的是矢量字体。矢量字体大概分成三类:Adobe主导的Type1、Apple和Microsoft主导的TrueType、Adobe,Apple和Microsoft共同主导的开源字体OpenType。

在矢量字体里面每个Unicode只是每个字符的一个索引,每个字符描述信息是一个几何矢量绘图描述信息。以Type1为例,它使用三次贝塞尔曲线来绘制字形。TrueType则使用二次贝塞尔曲线描述字形。正是由于矢量字体是绘制出来的,所以它可以实时填充任何颜色,并且可以无极缩放而没有锯齿。

阿里巴巴的图标网站(https://iconfont.cn/),我们可以在此网站上搜索到任何图片在线编辑,并下载样式文件,在小程序里面使用。

字体源说明:

  • EOT是微软IE浏览器专用的OpenType字体类型。

  • TTF是TrueType字体。

  • WOFF与WOFF2是移动开发专用的矢量字体格式。是对三种矢量字体格式的再封装。

链接各种字体文件源可以兼容不同浏览器宿主环境。浏览器会选择自己支持的格式,从列表中的第一个开始尝试加载。一旦获得一个可以使用的,就不会再加载剩下的字体格式了。小程序里面建议使用TTF和WOFF这两个格式。WOFF2在低版本的IOS设备上会有不兼容的问题。

使用示例可以参考此文章

https://www.jianshu.com/p/25db60f77531

使用SVG矢量文件

很多作图软件都可以导出SVG格式的矢量文件,比方说 Sketch,但是它导出的SVG格式的矢量文件有没有用的垃圾信息。可以到 阿里巴巴的图标网站 编辑好之后下载SVG格式的矢量文件,它不带什么垃圾信息。然后我们拿这个文件找一个Image2base64工具,将文件内容转化为base64的字符串。然后就可以在小程序里使用这个base64的字符串作为图片源,实现自定义图标了。

示例

1、准备SVG图片

2、使用线上Image2base64转换图片为:

data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjM2OTcwNTk4NjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2MDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMzI2LjIgNDI5LjdMNzEwIDQyOCA1MjUuNCA4OTIuMXoiIGZpbGw9IiM4M0E0RkYiIHAtaWQ9IjI2MDEiPjwvcGF0aD48cGF0aCBkPSJNMzcwLjIgMjcxLjFsMjkyLjQgMi42IDUxLjcgMTEzLTM3OS41LTIuNnoiIGZpbGw9IiNGRjdFNzEiIHAtaWQ9IjI2MDIiPjwvcGF0aD48cGF0aCBkPSJNMjk2LjEgMzgwLjdMNjQuOSAyODQuMWwxMjQuMi05Mi4zIDE0OC40IDc2Ljd6IiBmaWxsPSIjQTRCRUZGIiBwLWlkPSIyNjAzIj48L3BhdGg+PHBhdGggZD0iTTY0LjkgMzMwLjVMMjg0IDQyOGwyMzUuNSA0NjAuNnpNNzU1LjYgNDI3LjFMOTYwLjkgMzIxIDUyOC44IDg4NnoiIGZpbGw9IiM1Qjc5RkIiIHAtaWQ9IjI2MDQiPjwvcGF0aD48cGF0aCBkPSJNNzUxLjMgMzc5LjhsLTU3LjgtMTE5IDEzMi03My40IDExMy44IDk1Ljh6IiBmaWxsPSIjQTRCRUZGIiBwLWlkPSIyNjA1Ij48L3BhdGg+PHBhdGggZD0iTTM2NS44IDIzMy40bC01MC0xMi45LTk0LTUyLjcgMTEwLjQtMzkuNmgzNjAuNmwxMDkuNSA0NS43LTEwNS4yIDUwLjktMzUuNCA4LjZ6IiBmaWxsPSIjQzdEOEZGIiBwLWlkPSIyNjA2Ij48L3BhdGg+PC9zdmc+

3、编写代码

.svg-icon{
    display: block;
    width: 200px;
    height: 200px;  
    background-repeat: no-repeat;
    background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB0PSIxNjM2OTcwNTk4NjAyIiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHAtaWQ9IjI2MDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj48L3N0eWxlPjwvZGVmcz48cGF0aCBkPSJNMzI2LjIgNDI5LjdMNzEwIDQyOCA1MjUuNCA4OTIuMXoiIGZpbGw9IiM4M0E0RkYiIHAtaWQ9IjI2MDEiPjwvcGF0aD48cGF0aCBkPSJNMzcwLjIgMjcxLjFsMjkyLjQgMi42IDUxLjcgMTEzLTM3OS41LTIuNnoiIGZpbGw9IiNGRjdFNzEiIHAtaWQ9IjI2MDIiPjwvcGF0aD48cGF0aCBkPSJNMjk2LjEgMzgwLjdMNjQuOSAyODQuMWwxMjQuMi05Mi4zIDE0OC40IDc2Ljd6IiBmaWxsPSIjQTRCRUZGIiBwLWlkPSIyNjAzIj48L3BhdGg+PHBhdGggZD0iTTY0LjkgMzMwLjVMMjg0IDQyOGwyMzUuNSA0NjAuNnpNNzU1LjYgNDI3LjFMOTYwLjkgMzIxIDUyOC44IDg4NnoiIGZpbGw9IiM1Qjc5RkIiIHAtaWQ9IjI2MDQiPjwvcGF0aD48cGF0aCBkPSJNNzUxLjMgMzc5LjhsLTU3LjgtMTE5IDEzMi03My40IDExMy44IDk1Ljh6IiBmaWxsPSIjQTRCRUZGIiBwLWlkPSIyNjA1Ij48L3BhdGg+PHBhdGggZD0iTTM2NS44IDIzMy40bC01MC0xMi45LTk0LTUyLjcgMTEwLjQtMzkuNmgzNjAuNmwxMDkuNSA0NS43LTEwNS4yIDUwLjktMzUuNCA4LjZ6IiBmaWxsPSIjQzdEOEZGIiBwLWlkPSIyNjA2Ij48L3BhdGg+PC9zdmc+");
}
<view>
    <icon class="svg-icon"></icon>
</view>
说明

此种方法仍旧需要一张图片处理一次,然后在页面中引用。注意:样式文件中的width和height属性的值需要和下载的SVG文件的width和height保持一致的(在svg标签中可以看到)。

使用Canvas绘制SVG绘制

这种绘制用于制作动画还是可以的,但是用来做图标有点大材小用了。

腾讯的将SVG绘制成图像的 Cax 引擎

https://developers.weixin.qq.com/community/develop/article/doc/000ca493bc09c0d03a8827b9b5b013

更多编程相关知识,请访问:编程入门!!

以上是淺析小程式中怎麼實現Icon圖示?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用