1. 程式人生 > >JS元件系列——不容錯過的兩款Bootstrap Icon圖示選擇元件

JS元件系列——不容錯過的兩款Bootstrap Icon圖示選擇元件

前言:最近好多朋友在群裡面聊到bootstrap icon圖示的問題,比如最常見的選單管理,每個選單肯定需要一個對應的選單圖示,要是有一個視覺化的圖示選擇元件就好了,最好是直接選擇圖示,就能得到對應的class樣式。於是乎各種百度,皇天不負有心人,最後被博主找到了,感覺效果還不錯,並且支援自定義的圖示,今天就拿出來分享下,絕對的乾貨哦!

一、Bootstrap icon picker元件

這個元件是在github上面搜尋的時候找到的,初初看上去,確實是很不錯的,並且是基於bootstrap風格的,所以更加適合使用bootstrap風格佈局的專案。既然是github上面的,毋庸置疑,這是一個開源元件,

原始碼地址。好了,說了這麼多,一起來看看它到底長啥樣子吧。

1、元件效果預覽

第一次初始化

支援“上一頁”和“下一頁”

支援自定義圖示的選擇

支援模糊搜尋圖示,比如我們搜尋camera

選擇圖示後對應的樣式放入到文字框裡面

2、元件程式碼示例

(1)普通用法

此元件基於bootstrap和jquery,需要引用的檔案如下

   <link href="~/Content/bootstrap/css/bootstrap.css" rel="stylesheet" />
    <link href="~/Content/Bootstrap-icon-picker-master/Bootstrap-icon-picker-master/css/icon-picker.css"
rel="stylesheet" /> <script src="~/Scripts/jquery-1.9.1.js"></script> <script src="~/Content/Bootstrap-icon-picker-master/Bootstrap-icon-picker-master/js/iconPicker.js"></script>

在html頁面上面放置一個普通的的input文字框

 <input type="text" class="form-control" id="txt_boostrap_icon"
>

JS初始化

     $(function () {
            //bootstrap icon初始化
            $("#txt_boostrap_icon").iconPicker();
        });

這樣初始化之後就能看到如上圖的效果了。有木有很簡單~~

然後我們需要獲取選中的值,和普通input文字框的使用方法沒有任何區別 var bootstrap_icon = $("#txt_boostrap_icon").val(); 

(2)自定義圖示

我們看到使用上面的方法初始化之後,圖示的個數是固定的那麼幾十個。如果我們需要往裡面加一些我們自己的icon圖示怎麼辦呢?又或者,我們需要使用背景圖片來作為圖示,該怎麼辦?別急,辦法總是會有的!我們先來簡單看看它的js原始碼:

總共也就一百多行程式碼,要看懂也不難。我們重點來看看上面紅線匡裡面的變數 icons ,觀察發現這個數組裡面存放的就是我們所有圖示的集合。再來看看生成的html原始碼。

由此我們猜想是否可以自定義樣式也命名為glyphicon-這樣的一些樣式來自定義圖示呢?有了這個想法,我們在css檔案裡面新加兩個樣式

然後在 icons 變數裡面加test11、test12、test13、test14四個項之後

var icons = new Array("adjust", "align-center", "align-justify", "align-left", "align-right", "arrow-down", "arrow-left", "arrow-right", "arrow-up",......... "zoom-out","test11","test12","test13", "test14");

好了,大功告成。接下來就是重新整理頁面看效果了。

 所以這個元件最大的好處就是擴充套件自己的圖示方便,不管是Font Awesome Icons還是使用背景圖片都可以無縫對接。槓槓的!

二、jQuery fontIconPicker元件

jquery fonticonpicker是博主在找jquery外掛的時候無意中發現的,不發現不要緊,仔細研究後發現這元件真心不錯,尤其是介面效果很棒。並且開源,文件全,功能豐富。原始碼下載地址

1、元件效果預覽

初始化的時候自定義了四種主題(博主更偏愛第一種bootstrap風格的)

 

支援分頁

滑鼠放上面效果

支援模糊搜尋

支援自定義每頁顯示的圖示個數,比如我們改成每頁顯示30個圖示

選擇某個圖示後的效果

博主覺得效果真心不錯。

2、元件程式碼示例

(1)普通用法

這個元件不需要bootstrap的支援,但是需要jquery的支援,不過我們測試的需要還是將bootstrap.css給引用進來。

   <script src="~/Scripts/jquery-1.9.1.js"></script>
    <script src="~/Content/fontIconPicker-2.0.0/jquery.fonticonpicker.js"></script>

    <link href="~/Content/bootstrap/css/bootstrap.css" rel="stylesheet" />
    <link href="~/Content/fontIconPicker-2.0.0/css/jquery.fonticonpicker.css" rel="stylesheet" />
    <link href="~/Content/fontIconPicker-2.0.0/themes/grey-theme/jquery.fonticonpicker.grey.css" rel="stylesheet" />
    <link href="~/Content/fontIconPicker-2.0.0/themes/dark-grey-theme/jquery.fonticonpicker.darkgrey.css" rel="stylesheet" />
    <link href="~/Content/fontIconPicker-2.0.0/themes/bootstrap-theme/jquery.fonticonpicker.bootstrap.css" rel="stylesheet" />
    <link href="~/Content/fontIconPicker-2.0.0/themes/inverted-theme/jquery.fonticonpicker.inverted.css" rel="stylesheet" />
    <link href="~/Content/fontIconPicker-2.0.0/fontIconPicker-2.0.0/demo/fontello-7275ca86/css/fontello.css" rel="stylesheet" />

效果炫,封裝得就多了,必然引用的檔案就多。

再來看看html準備

1)靜態html

                <select id="myselect" name="myselect" class="myselect">
                                <option value="">No icon</option>
                                <option>icon-user</option>
                                <option>icon-search</option>
                                <option>icon-right-dir</option>
                                <option>icon-star</option>
                                <option>icon-cancel</option>
                                <option>icon-help-circled</option>
                                <option>icon-info-circled</option>
                                <option>icon-eye</option>
                                <option>icon-tag</option>
                                <option>icon-bookmark</option>
                                <option>icon-heart</option>
                                <option>icon-thumbs-down-alt</option>
                                <option>icon-upload-cloud</option>
                                <option>icon-phone-squared</option>
                                <option>icon-cog</option>
                                <option>icon-wrench</option>
                                <option>icon-volume-down</option>
                                <option>icon-down-dir</option>
                                <option>icon-up-dir</option>
                                <option>icon-left-dir</option>
                                <option>icon-thumbs-up-alt</option>
                            </select>

2)如果是動態設定圖示,這裡只需要放一個空的select即可

<select id="myselect" name="myselect" class="myselect"></select>

JS初始化

1)靜態初始化(針對select裡面已經寫好了option的情況)

$(function () {
      //jquery icon初始化
      $('#myselect').fontIconPicker(); // Load with default options
  });

2)動態初始化(針對空的select標籤)

$(function () {
            //jquery icon初始化
            $('#myselect').fontIconPicker({
                theme: 'fip-bootstrap',//四種主題風格:fip-grey, fip-darkgrey, fip-bootstrap, fip-inverted
                source: ["icon-music", "icon-search", "icon-mail", "icon-mail-alt", "icon-heart", "icon-heart-empty", "icon-star", "icon-star-empty", "icon-star-half", "icon-star-half-alt", "icon-user", "icon-users", "icon-male", "icon-female", "icon-video", "icon-videocam", "icon-picture", "icon-camera", "icon-camera-alt", "icon-th-large", "icon-th", "icon-th-list", "icon-ok", "icon-ok-circled", "icon-ok-circled2", "icon-ok-squared", "icon-cancel", "icon-cancel-circled", "icon-cancel-circled2", "icon-plus", "icon-plus-circled", "icon-plus-squared", "icon-plus-squared-small", "icon-minus", "icon-minus-circled", "icon-minus-squared", "icon-minus-squared-alt", "icon-minus-squared-small", "icon-help", "icon-help-circled", "icon-info-circled", "icon-info", "icon-home", "icon-link", "icon-unlink", "icon-link-ext", "icon-link-ext-alt", "icon-attach", "icon-lock", "icon-lock-open", "icon-lock-open-alt", "icon-pin", "icon-eye", "icon-eye-off", "icon-tag", "icon-tags", "icon-bookmark", "icon-bookmark-empty", "icon-flag", "icon-flag-empty", "icon-flag-checkered", "icon-thumbs-up", "icon-thumbs-down", "icon-thumbs-up-alt", "icon-thumbs-down-alt", "icon-download", "icon-upload", "icon-download-cloud", "icon-upload-cloud", "icon-reply", "icon-reply-all", "icon-forward", "icon-quote-left", "icon-quote-right", "icon-code", "icon-export", "icon-export-alt", "icon-pencil", "icon-pencil-squared", "icon-edit", "icon-print", "icon-retweet", "icon-keyboard", "icon-gamepad", "icon-comment", "icon-chat", "icon-chat-empty", "icon-bell", "icon-bell-alt", "ion-android-alert", "ion-android-apps"],
                emptyIcon: true,//是否顯示空
                emptyIconValue: "none",//空值
                iconsPerPage: 30, //每頁顯示圖示的個數,預設20
                hasSearch: true,//是否顯示試試框,預設true

            }); 
        });

其實也很簡單,就那麼幾個可以設定的引數,程式碼裡面已經寫了相應的註釋,這裡就不做過多講解。

同樣,獲取選中的值,可以直接使用jquery的val()即可。

(2)自定義圖示

看了上面bootstrap icon的自定義圖示,你是否也在想,這個元件也能支援自定義就好了。呵呵,博主也是這樣想的。行不行呢?我們先來試一試。

1)使用背景圖片的圖示嘗試,結果失敗

首先直接在頁面上面定義一個使用背景圖片的樣式

<style type="text/css">
        .glyphicon-test13 {
            background: url('/Content/images/icons/p13.png') no-repeat center center!important;
            height: 15px!important;
            width: 14px!important;
        }
</style>

然後將"glyphicon-test13"放入到初始化source對應的陣列的最後,看似大功告成。我們重新整理下介面看看

事與願違,圖示背景圖無法正常顯示。這是為什麼呢?博主好奇心又來了,稽核元素看看:

原來這個元件生成的是i標籤,它和上面的span是不同的,span可以作為容器,而i只能作為一種斜體標籤,沒有容器的佔位功能,所以此種嘗試失敗。但是博主不服氣了,你說i標籤不是容器沒有實際的佔位是吧,我們將i裡面寫入多個空格行不行呢?

可以看到向i標籤裡面加入空格之後,確實可以讓圖片顯示出來,貌似問題完美解決!但是,但是,別高興太早了,選中的時候還是不行,因為選中的裡面還是空的i標籤。所以總的來說,這種方式可以作為一種參考思路,後面有時間看是否可以適當修改下原始碼實現這個功能,目前這階段是不支援自定背景圖片的!

2)使用css寫的圖示嘗試,結果成功

既然自定義背景圖片不行,那麼如果我們自定義icon呢,也就是如果我們都通過:before{content:""}這種方式來寫的圖示是否可行呢?答案是肯定的!我們找到一個專門放icon的網站Icon下載,去裡面下載icon包,引用到我們專案的頁面中來。

我們隨便選兩個"ion-android-archive"、"ion-android-arrow-back"放到初始化source對應的陣列的最後。重新整理介面

選中之後

三、比較

以上就是兩種icon圖示選擇元件的使用示例。對比一下,這種元件其實各有利弊。

1、從介面效果來看,第二種(jquery fontIconPicker)要比第一種(Bootstrap icon picker)要好看,介面更炫,使用者體驗更好。這個沒有爭議。

2、從元件的輕量級上面來說,第一種是要比第二種更優的,很明顯,第二種引用了那麼多的css,肯定或多或少會導致元件的臃腫。

3、從使用是否方便的角度來看,第一種使用更加簡單,更易擴充套件;第二種api 更加全面,可自定義的項比較多,使用靈活,但是自定義背景圖片目前會有問題。

好了,這篇就到這裡。如果你的專案正好也需要用到這種圖示選擇元件,可以用起來試試。有什麼問題我們一起交流。如果本文能夠對你有絲毫幫助,麻煩擡起你的小手點個推薦,博主一定繼續努力,將更好的文章分享給大家。

相關推薦

JS元件系列——不容錯過Bootstrap Icon圖示選擇元件

前言:最近好多朋友在群裡面聊到bootstrap icon圖示的問題,比如最常見的選單管理,每個選單肯定需要一個對應的選單圖示,要是有一個視覺化的圖示選擇元件就好了,最好是直接選擇圖示,就能得到對應的class樣式。於是乎各種百度,皇天不負有心人,最後被博主找到了,感覺效果還不錯,並且支援自定義的圖示,今天就

JS元件系列——再推薦一好用的bootstrap-select元件,親測還不錯

前言:之前分享過兩篇bootstrap下拉框的元件:JS元件系列——兩種bootstrap multiselect元件大比拼  和 JS元件系列——Bootstrap Select2元件使用小結 ,收到很多園友的關注和提問,最後總結這兩篇裡面的下拉框元件都存在一些大大小小的問題,比如兩種bootstrap m

JS元件系列——分享自己封裝的Bootstrap樹形元件:jqTree

 前言:之前的一篇介紹了下如何封裝自己的元件,這篇再次來體驗下自己封裝元件的樂趣。看過博主部落格的園友應該記得之前分享過一篇樹形選單的使用JS元件系列——Bootstrap 樹控制元件使用經驗分享,這篇裡面第一個Jquery Tree,只是用簡單樣式和js去實現了效果,沒有給出一個系統的封裝,這篇博主就來試試

vue系列---基於 Element UI 的省市區街道聯動選擇元件

vue-area-linkage 省市區聯動選擇,基於 Element UI. 組合資料來源:area-data 下載元件: npm i --save vue-area-linkage 引入元件

JS元件系列——bootstrap multiselect元件大比拼[轉載]

轉載原文地址:https://www.cnblogs.com/landeanfen/p/5013452.html 前言:今天繼續來看看bootstrap的另一個元件:multiselect。記得在專案開始之前,博主專案組幾個同事就使用哪些js元件展開過討論,其中就說到了select元件,

JS元件系列——Bootstrap元件福利篇:幾好用的元件推薦

前言:之前分享過很多bootstrap常用元件,包括表格、表單驗證、檔案上傳、複選下拉框、彈出框等。這段時間,博主又收藏了一些好用的元件(有些在專案中已經用起來了),經過兩天的時間,已經整理出了一部分,本著“好東西要與人分享”的原則,今天還是來點福利,將博主收藏的東西分享出來,供需要的園友參考。元件大部分都是

JS元件系列——bootstrap multiselect元件大比拼

前言:今天繼續來看看bootstrap的另一個元件:multiselect。記得在專案開始之前,博主專案組幾個同事就使用哪些js元件展開過討論,其中就說到了select元件,由於專案的整體風格使用的bootstrap風格,所以在選用select元件的時候優先考慮和bootstrap結合使用的。其中就找到了兩個

JS元件系列——Bootstrap元件福利篇:幾好用的元件推薦(二)

前言:上篇 JS元件系列——Bootstrap元件福利篇:幾款好用的元件推薦 分享了幾個專案中比較常用的元件,引起了許多園友的關注。這篇還是繼續,因為博主覺得還有幾個非常簡單、實用的元件,實在不願自己一人獨享,沒辦法,誰讓博主這麼愛分享呢~~ 七、多值輸入元件manifest 關於文字框的多值輸入,一

JS元件系列——表格元件神器:bootstrap table(三:終結篇,最後的乾貨福利)

前言:前面介紹了兩篇關於bootstrap table的基礎用法,這章我們繼續來看看它比較常用的一些功能,來個終結篇吧,毛爺爺告訴我們做事要有始有終~~bootstrap table這東西要想所有功能覆蓋似乎不太現實,博主挑選了一些自認為比較常用的功能在此分享給各位園友。原始

JS元件系列——表格元件神器:bootstrap table

前言:之前一直在忙著各種什麼效果,殊不知最基礎的Bootstrap Table用法都沒有涉及,罪過,罪過。今天補起來吧。上午博主由零開始自己從頭到尾使用了一遍Bootstrap Table ,遇到不少使用方面的問題,也做了一部分筆記,在此分享出來供需要使用的園友參考。還記得前

JS元件系列——表格元件神器:bootstrap table(二:父子表和行列調序)

前言:上篇 JS元件系列——表格元件神器:bootstrap table 簡單介紹了下Bootstrap Table的基礎用法,沒想到討論還挺熱烈的。有園友在評論中提到了父子表的用法,今天就結合Bootstrap table的父子表和行列調序的用法再來介紹下它稍微高階點的用法

JS元件系列——又一MVVM元件:Vue(一:30分鐘搞定前端增刪改查)

正文 前言:關於Vue框架,好幾個月之前就聽說過,瞭解一項新技術之後,總是處於觀望狀態,一直在猶豫要不要系統學習下。正好最近有點空,就去官網瞭解了下,看上去還不錯的一個元件,就抽空研究了下。最近園子裡vue也確實挺火,各種入門博文眼花繚亂,博主也不敢說寫

JS元件系列——又一MVVM元件:Vue(二:構建自己的Vue元件

前言:轉眼距離上篇 JS元件系列——又一款MVVM元件:Vue(一:30分鐘搞定前端增刪改查) 已有好幾個月了,今天打算將它撿起來,發現好久不用,Vue相關技術點都生疏不少。經過這幾個月的時間,Vue的發展也是異常迅猛,不過這好像和博主都沒什麼太大的關係,博主還是老老實實研究自己的技術吧。技術之路還很長,且行

JS元件系列——BootstrapTable+KnockoutJS實現增刪改查解決方案(三):個Viewmodel搞定增刪改查

前言:之前博主分享過knockoutJS和BootstrapTable的一些基礎用法,都是寫基礎應用,根本談不上封裝,僅僅是避免了html控制元件的取值和賦值,遠遠沒有將MVVM的精妙展現出來。最近專案打算正式將ko用起來,於是乎對ko和bootstraptable做了一些封裝,在此分享出來供園友們參考。封裝

JS元件系列——自己動手封裝bootstrap-treegrid元件

前言:最近產品需要設計一套相對完整的組織架構的解決方案,由於組織架構涉及到層級關係,在表格裡面展示層級關係,自然就要用到所謂的treegrid。可惜的是,一些輕量級的表格元件本身並沒有自帶樹形表格的功能,比如bootstrapTable就沒有這個功能,怎麼辦呢?如果是jqgrid、easyUI的表格,tree

JS元件系列——基於Bootstrap Ace模板的選單和Tab頁效果分享(你值得擁有)

前言:最近園子裡多了許多談語言、談環境、談逼格(格局)的文章,看看笑笑過後,殊不知其實都是然並卵。提升自己的技術才是王道。之前博主分享過多篇bootstrap元件的文章,引起了很多園友的關注和支援,看樣子這種風格還是受到很多園友青睞的。本著不辜負園友們的支援的原則,應群友們的要求,今天來分享下專案中使用Ace

JS元件系列——Bootstrap Table 表格行拖拽

前言:之前一直在研究DDD相關知識,好久沒更新JS系列文章了。這兩天做了一個簡單的業務需求,覺得效果還可以,今天在這裡分享給大家,歡迎拍磚~~ 一、業務需求及實現效果 專案涉及到訂單模組,那天突然接到一個需求,說是兩種不同狀態的訂單之間要實現插單的效果,頁面上呈現方式是:左右兩個Table,左邊Table

JS元件系列——Bootstrap右鍵選單解決方案:ContextMenu

前言:有段時間沒發表隨筆了,過個年人都變得懶了。新年剛來上班,今天正好得空,將去年遺留的兩個小元件總結記錄下。有朋友跟我說:你的bootstrap元件要能夠形成一個可以滿足一般專案需求的系列元件,才有真正的實用價值。想想說得在理。這不今天來總結下bootstrap的一個小元件的應用。好了,不說廢話,進入正題吧

JS元件系列——Bootstrap 樹控制元件使用經驗分享

前言:很多時候我們在專案中需要用到樹,有些樹僅僅是展示層級關係,有些樹是為了展示和編輯層級關係,還有些樹是為了選中項然後其他地方呼叫選中項。不管怎麼樣,樹控制元件都是很多專案裡面不可或缺的元件之一。今天,博主打算結合自己的使用經歷和網上找到的一些不錯的樹控制元件在這裡做一個分享,希望能幫大家找到最合適的控制元

JS元件系列——Bootstrap寒冬暖身篇:彈出框和提示框效果以及程式碼展示

前言:對於Web開發人員,彈出框和提示框的使用肯定不會陌生,比如常見的表格新增和編輯功能,一般常見的主要有兩種處理方式:行內編輯和彈出框編輯。在增加使用者體驗方面,彈出框和提示框起著重要的作用,如果你的系統有一個友好的彈出提示框,自然能給使用者很好的頁面體驗。前面幾章介紹了bootstrap的幾個常用元件,這