日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
JQuery插件的開發(fā)真的有那么難嗎

【前言】
jQuery已經(jīng)被廣泛使用,憑借其簡潔的API,對DOM強大的操控性,易擴展性越來越受到web開發(fā)人員的喜愛,我在社區(qū)也發(fā)布了很多的jQuery插件,經(jīng)常有人詢問一些技巧,因此干脆寫這么一篇文章給各位jQuery愛好者,算是拋磚引玉吧。

創(chuàng)新互聯(lián)專注于南木林網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供南木林營銷型網(wǎng)站建設(shè),南木林網(wǎng)站制作、南木林網(wǎng)頁設(shè)計、南木林網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造南木林網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供南木林網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

【基礎(chǔ)】
a)樣式
很多人會認(rèn)為樣式是個很復(fù)雜的東西,需要沉著冷靜的心態(tài)加上非凡的審美觀才能設(shè)計出賞心悅目的UI,拋開圖片設(shè)計不說,其實css也就是那么些屬性:position,margin,padding,width,height,left,top,float,border,background...

UI設(shè)計的漂亮與否在很大程度上依賴于設(shè)計人員對配色的把握和整體效果的協(xié)調(diào)。舉個簡單的例子,一個簡單的頁面,馬虎的人:  

 
 
 
 
  1.  
  2.  
  3.     Test Pagetitle> </li> <li>head> </li> <li><body> </li> <li>    jQuery是一個框架!壓縮后有30多k吧。  </li> <li>body> </li> <li>html> </li> </ol></pre><p>細(xì)心的人:</p><pre> <ol> <li><html xmlns="http://www.w3.org/1999/xhtml"> </li> <li><head> </li> <li>    <title>Test Pagetitle> </li> <li>    <style type="text/css"> </li> <li>        body  </li> <li>        {  </li> <li>            font-family:'宋體';  </li> <li>            font-size:12px;  </li> <li>            }  </li> <li>    style> </li> <li>head> </li> <li><body> </li> <li>    jQuery是一個框架!壓縮后有30多k吧。  </li> <li>body> </li> <li>html> </li> </ol></pre><p>專心的人:</p><pre> <ol> <li><html xmlns="http://www.w3.org/1999/xhtml"> </li> <li><head> </li> <li>    <title>Test Pagetitle> </li> <li>    <style type="text/css"> </li> <li>        body  </li> <li>        {  </li> <li>            font-family:'Verdana','宋體';  </li> <li>            font-size:12px;  </li> <li>            }  </li> <li>    style> </li> <li>head> </li> <li><body> </li> <li>    jQuery是一個框架!壓縮后有30多k吧。  </li> <li>body> </li> <li>html> </li> </ol></pre><p>我們對比一下三者的UI效果:</p><p> 一目了然,或許很多的站點失去關(guān)注正是因為這不起眼的font-family,font-size。當(dāng)然這還只是個簡單的例子,掌握css應(yīng)該從簡單做起,從基本入手,在實踐中運用并不斷深入。</p><p>b)腳本 <br /> 我們同樣需要對javascript有著深刻的理解,對dom, xhr, Regex, call-apply, prototype等都應(yīng)該有一定的了解。</p><p>有人會說要這些有啥用啊,對dom的操作其實通過getElementById, getElementsByTagName以及其他的API都可以輕松的完成,這話是沒錯,當(dāng)思路確定后,思想才是重點,一段代碼是精華還是糟粕很容易就可以區(qū)分出來,究其原因還是取決你自己,舉個簡單的例子,大量的html組裝,</p><p>路人甲:</p><pre> <ol> <li>var a = new Array(10);  </li> <li>var menu = '';     </li> <li>for (var i = 0; i < a.length; i++) {  </li> <li>  menu += '' + a[i] + '" >' + a[i] + '';  </li> <li>}  </li> </ol></pre><p>路人乙:</p><pre> <ol> <li>String.prototype.format = function() {  </li> <li>    var args = arguments;  </li> <li>    return this.replace(/{(\d{1})}/g, function() {  </li> <li>        return args[arguments[1]];  </li> <li>    });  </li> <li>};  </li> <li> </li> <li>var a = new Array(1,2,3,4,5,6,7,8,9,0);  </li> <li>var m = '{0}';  </li> <li> </li> <li>for (var i = 0; i < a.length; i++) {  </li> <li>    menu += m.format(a[i]);  </li> <li>}  </li> </ol></pre><p>在實現(xiàn)方式明確的情況下,優(yōu)雅高效的代碼顯然更具吸引力。</p><p>【實踐】<br /> jQuery開發(fā)或使用,更多的靈感是來自實踐,而不是copy||paste(奉行拿來主義的同學(xué)可以離開了)。</p><p>那么在這里我會用一個簡單的例子來闡述jQuery插件開發(fā)的流程,能否舉一反三就看各位看官了。</p><p>【目的】</p><p>開發(fā)一個插件之前我們需要對自己的目的有一個清醒的認(rèn)識,有很明確的方向感,那么此次我作為示例插件的目的,就是呈現(xiàn)一個用于UI的Slider - 滑動條,常年從事于或暫時專注于win32開發(fā)的同學(xué)應(yīng)該比較了解。</p><p>草圖</p><p>真正動手編碼之前我們還需要有一個草圖來描述自己插件的“長相”(事件驅(qū)動或API封裝的可以忽略)。<br /> 很多的同學(xué)在做UI開發(fā)前往往會忙于搜集各種小圖片(非精通ps或iconworkshop人士),其實漂亮的圖標(biāo)的確可以美化我們的UI,不過我一般的處理方式是編寫易于擴展的css,前期的UI呈現(xiàn)盡量少使用圖片,多用線條完成。</p><p>  ok,言歸正卷,那么我的slider設(shè)計草圖是:</p><p>解釋下下文將用到的幾個詞:<br /> slider: 此部分是作為拖拽手柄來使用,用戶可以通過拖拽此部分來更新completed bar的位置。<br /> completed: 此部分作為bar的內(nèi)嵌元素,作為特殊效果來顯示slider與起始點的距離,亦即與slider的value值關(guān)聯(lián)。<br /> bar: slider的載體,completed的滿值。</p><p>思路:<br /> slider作為手柄提供拖拽功能,作用區(qū)域為bar,拖拽過程中completed條必須實時更新(長度),影響區(qū)域為slider至bar左端的距離。</p><p>【編碼】</p><p>開發(fā)jQuery UI/Effect 插件在很多時候都需要與UI交互,因此在呈現(xiàn)上需要提供Html tree來繪制我們的插件,最終通過js dom來輸出,那么在繪制簡單的dom結(jié)構(gòu)的時候我會直接用js來完成,不過如果嵌套比較復(fù)雜的話,我們還是應(yīng)該先用html來完成,然后轉(zhuǎn)變成js輸出。</p><p>html tree:</p><pre> <ol> <li><div class="defaultbar"> </li> <li>  <div class="jquery-completed"> div> </li> <li>  <div class="jquery-jslider"> div> </li> <li>div> </li> </ol></pre><p>  deafultbar -> bar<br />   jquery-completed -> completed<br />   jquery-jslider -> slider</p><p>  前期UI呈現(xiàn)上我們不使用圖片,盡量用線條、顏色來完成:</p><pre> <ol> <li>/*----default skin----*/  </li> <li>.defaultbar  </li> <li>{  </li> <li>    margin-top: 10px;  </li> <li>    height: 5px;  </li> <li>    background-color: #FFFFE0;  </li> <li>    border: 1px solid #A9C9E2;  </li> <li>    position: relative;  </li> <li>    }  </li> <li>.defaultbar .jquery-completed  </li> <li>{  </li> <li>    height: 3px;  </li> <li>    background-color: #7d9edb;  </li> <li>    top: 1px;  </li> <li>    left:1px;  </li> <li>    position: absolute;  </li> <li>    }  </li> <li>.defaultbar .jquery-jslider  </li> <li>{  </li> <li>    height: 15px;  </li> <li>    background-color: #E6E6FA;  </li> <li>    border: 1px solid #A5B6C8;  </li> <li>    top: -6px;  </li> <li>    display: block;  </li> <li>    cursor: pointer;  </li> <li>    position: absolute;  </li> <li>    }  </li> </ol></pre><p>將bar的position屬性設(shè)置成relative,以方便子節(jié)點的浮動(子節(jié)點使用position:absolute來獲得內(nèi)聯(lián)浮動效果)。</p><p>那么我們可以看下這個css和html tree產(chǎn)生的UI效果: </p><p>ok,具備了所需的元素 - slider, completed, bar.</p><p>一些規(guī)范:</p><p>當(dāng)我們畫出了UI之后就可以正式編寫jQuery插件代碼了,不過在著之前我們還需要對jQuery插件開發(fā)的一些規(guī)范性有一些了解。</p><p><strong>1. 使用閉包:</strong></p><pre> <ol> <li>(function($) {  </li> <li>  // Code goes here  </li> <li>})(jQuery);  </li> </ol></pre><p>這是來自jQuery官方的插件開發(fā)規(guī)范要求,使用這種編寫方式有什么好處呢?</p><p>a) 避免全局依賴。</p><p>b) 避免第三方破壞。</p><p>c) 兼容jQuery操作符'$'和'jQuery '</p><p>我們知道這段代碼在被解析時會形同如下代碼:</p><pre> <ol> <li>var jq = function($) {  </li> <li>  // Code goes here  </li> <li>};   </li> <li>jq(jQuery);  </li> </ol></pre><p>這樣效果就一目了然了。</p><p><strong>2. 擴展</strong></p><p>jQuery提供了2個供用戶擴展的‘基類’ - $.extend和$.fn.extend.</p><p>$.extend 用于擴展自身方法,如$.ajax, $.getJSON等,$.fn.extend則是用于擴展jQuery類,包括方法和對jQuery對象的操作。為了保持jQuery的完整性,我比較趨向于使用$.fn.extend進行插件開發(fā)而盡量少使用$.extend.</p><p><strong>3. 選擇器</strong></p><p>jQuery提供了功能強大,并兼容多種css版本的選擇器,不過發(fā)現(xiàn)很多同學(xué)在使用選擇器時并未注重效率的問題。 </p><p> a) 盡量使用Id選擇器,jQuery的選擇器使用的API都是基于getElementById或getElementsByTagName,因此可以知道效率***的是Id選擇器,因為jQuery會直接調(diào)用getElementById去獲取dom,而通過樣式選擇器獲取jQuery對象時往往會使用 getElementsByTagName去獲取然后篩選。</p><p> b) 樣式選擇器應(yīng)該盡量明確指定tagName, 如果開發(fā)人員使用樣式選擇器來獲取dom,且這些dom屬于同一類型,例如獲取所有className為jquery的div,那么我們應(yīng)該使用的寫法是$('div.jquery')而不是$('.jquery'),這樣寫的好處非常明顯,在獲取dom時jQuery會獲取div然后進行篩選,而不是獲取所有dom再篩選。</p><p>c) 避免迭代,很多同學(xué)在使用jQuery獲取指定上下文中的dom時喜歡使用迭代方式,如$('.jquery .child'),獲取className為jquery的dom下的所有className為child的節(jié)點,其實這樣編寫代碼付出的代價是非常大的,jQuery會不斷的進行深層遍歷來獲取需要的元素,即使確實需要,我們也應(yīng)該使用諸如$(selector,context), $('selector1>selector2'), $(selector1).children(selector2), $(selctor1).find(selector2)之類的方式。</p><p>開始編碼</p><p>話題有點扯遠(yuǎn),ok,在對UI有了清晰的認(rèn)識后我們就可以使用js來輸出html了。</p><p>我們使用jSlider來命名這個slider插件(為了避免插件沖突,插件命名時也應(yīng)十分考究,這里我就俗一回)。</p><pre> <ol> <li>$.extend($.fn, {  </li> <li>        ///  </li> <li>        /// apply a slider UI  </li> <li>        ///  </li> <li>        jSlider: function(setting) {  </li> <li>        }  </li> <li>});  </li> </ol></pre><p>在插件開發(fā)中比較標(biāo)準(zhǔn)的方式是將元數(shù)據(jù)獨立出來并開放API,比如這里的setting參數(shù)傳入值,有時候為了減少代碼編寫量,我習(xí)慣于直接在插件內(nèi)賦值:</p><pre> <ol> <li>var ps = $.extend({  </li> <li>    renderTo: $(document.body),  </li> <li>    enable: true,  </li> <li>    initPosition: 'max',  </li> <li>    size: { barWidth: 200, sliderWidth: 5 },  </li> <li>    barCssName: 'defaultbar',  </li> <li>    completedCssName: 'jquery-completed',  </li> <li>    sliderCssName: 'jquery-jslider',  </li> <li>    sliderHover: 'jquery-jslider-hover',  </li> <li>    onChanging: function() { },  </li> <li>    onChanged: function() { }  </li> <li>}, setting);  </li> </ol></pre><p>規(guī)范的做法:</p><pre> <ol> <li>$.fn.jSlider.default = {  </li> <li>    renderTo: $(document.body),  </li> <li>    enable: true,  </li> <li>    initPosition: 'max',  </li> <li>    size: { barWidth: 200, sliderWidth: 5 },  </li> <li>    barCssName: 'defaultbar',  </li> <li>    completedCssName: 'jquery-completed',  </li> <li>    sliderCssName: 'jquery-jslider',  </li> <li>    sliderHover: 'jquery-jslider-hover',  </li> <li>    onChanging: function() { },  </li> <li>    onChanged: function() { }  </li> <li>    };  </li> <li> </li> <li>$.extend({},$.fn.jSlider.default,setting);  </li> </ol></pre><p>ok, 下面描述下我所定義的這些API的作用:<br /> renderTo: jSlider的載體、容器,可以是一個jQuery對象,也可以是選擇器?! ?br /> enable: jSlider插件是否可用,true時end-user可拖拽,否則禁止。<br /> initPosition: jSlider的初始值,‘max’或者‘min’,亦即 slider的value值,1或者0。<br /> size: jSlider的參數(shù),包括2個值barWidth - bar的長度, sliderWidth - slider的長度。<br /> barCssName: bar的樣式名稱,便于end-user自行擴展樣式。<br /> completedCssName: completed的樣式名稱。<br /> sliderCssName: slider的樣式名稱。<br /> sliderHover: slider聚焦時的樣式名稱。<br /> onChanging: slider被拖拽時觸發(fā)的事件。<br /> onChanged: slider拖拽結(jié)束時觸發(fā)的事件。</p><p>此時我們需要將renderTo強制轉(zhuǎn)換成jQuery對象(兼容使用selector的情況):</p><pre> <ol> <li>ps.renderTo = (typeof ps.renderTo == 'string' ?  </li> <li>                 $(ps.renderTo) : ps.renderTo);  </li> </ol></pre><p>然后將html tree輸出到render:</p><pre> <ol> <li>/* ----------> </li> <li>html tree:  </li> <li> </li> <li> ---->sliderbar  </li> <li>    ----> completed bar  </li> <li>   ----> slider                    </li> <li><-----------*/  </li> <li>var sliderbar = $('')  </li> <li>                    .attr('class', ps.barCssName)  </li> <li>                        .css('width', ps.size.barWidth)  </li> <li>                            .appendTo(ps.renderTo);  </li> <li> </li> <li>var completedbar = sliderbar.find('div:eq(0)')  </li> <li>                        .attr('class', ps.completedCssName);  </li> <li> </li> <li>var slider = sliderbar.find('div:eq(1)')  </li> <li>                .attr('class', ps.sliderCssName)  </li> <li>                    .css('width', ps.size.sliderWidth);  </li> </ol></pre><p>這樣我們就在UI上直接呈現(xiàn)了Html并且用定制的css進行渲染,分別用sliderbar, completedbar, slider對我們需要的三個對象進行緩存。</p><p>ok, 在呈現(xiàn)了UI后我們就需要提供方法來實現(xiàn)slider的拖拽,在這之前我們還需要實現(xiàn)一個方法,就是completedbar的實時更新,即在拖動slider的時候讓completedbar始終填充左側(cè)區(qū)域:</p><pre> <ol> <li>var bw = sliderbar.width(), sw = slider.width();  </li> <li>//make sure that the slider was displayed in the bar(make a limited)  </li> <li>ps.limited = { min: 0, max: bw - sw };  </li> <li> </li> <li>if (typeof window.$sliderProcess == 'undefined') {  </li> <li>    window.$sliderProcess = new Function('obj1', 'obj2', 'left',  </li> <li>                                     'obj1.css(\'left\',left);obj2.css(\'width\',left);');  </li> <li>}  </li> <li>$sliderProcess(slider, completedbar, eval('ps.limited.' + ps.initPosition));  </li> </ol></pre><p>bw,sw用來存儲sliderbar和slider的長度,此處沒有直接使用ps.size里的值是為了防止樣式里的border-width對width造成破壞。</p><p>定義一個私用成員limited來存儲slider[left]的***值和最小值,并在后面直接使用eval('ps.limited.' + ps.initPosition)來獲取,從而避免switch操作。</p><p>同時還需定義一個全局Function用來定位completedbar的填充長度以及slider左側(cè)距離,我給其命名為$sliderProcess。</p><p>那么我們接下來剩下的工作就是slider的拖拽功能了,那么在這里我會用到之前發(fā)布的一款jQuery拖拽插件,并做適量的訂制:</p><pre> <ol> <li>//drag and drop  </li> <li>var slide = {  </li> <li>    drag: function(e) {  </li> <li>        var d = e.data;  </li> <li>        var l = Math.min(Math.max(e.pageX - d.pageX + d.left, ps.limited.min), ps.limited.max);  </li> <li> </li> <li>        $sliderProcess(slider, completedbar, l);  </li> <li>        //push two parameters: 1st:percentage, 2nd: event  </li> <li>        ps.onChanging(l / ps.limited.max, e);  </li> <li>    },  </li> <li>    drop: function(e) {  </li> <li>        slider.removeClass(ps.sliderHover);  </li> <li>        //push two parameters: 1st:percentage, 2nd: event  </li> <li>        ps.onChanged(parseInt(slider.css('left')) / ps.limited.max, e);  </li> <li> </li> <li>        $().unbind('mousemove', slide.drag).unbind('mouseup', slide.drop);  </li> <li>    }  </li> <li>};  </li> <li> </li> <li>if (ps.enable) {  </li> <li>    //bind events  </li> <li>    slider.bind('mousedown', function(e) {  </li> <li>        var d = {  </li> <li>            left: parseInt(slider.css('left')),  </li> <li>            pageX: e.pageX  </li> <li>        };  </li> <li>        $(this).addClass(ps.sliderHover);  </li> <li>        $().bind('mousemove', d, slide.drag).bind('mouseup', d, slide.drop);  </li> <li>    });  </li> <li>}  </li> </ol></pre><p>這樣當(dāng)jSlider enable屬性為true時,在end-user按下鼠標(biāo)時綁定mousemove事件,在鼠標(biāo)彈起時移除,我們只需要同步更新slider的left 屬性和completedbar的width即可,同時在drag中綁定onChanging方法,在drop中綁定onChanged方法,向這兩個方法推送的參數(shù)相同,1>百分比,即value值,介于0~1,2>event。</p><p>那么至此我們的jSlider插件就基本成型,向用戶提供了一個可拖拽的slider。</p><p>【擴展】 <br /> 有的時候用戶卻不是那么容易滿足,于是有人高呼:“我要自己設(shè)置value,為什么不提供這個功能?”。</p><p>那么這時我們就需要為用戶公開一個方法,用于設(shè)置jSlider的value,首先考慮的是作為方法需要一個作用對象(jSlider),那么此時我又不想將作用對象作為參數(shù)傳入,那么我們還是將這個方法作為插件來開發(fā),我們將方法命名為setSliderValue,開放2個參數(shù),v(value值)和 callback(設(shè)置完成后的回調(diào)函數(shù))。</p><p>即:$.fn.setSliderValue(v,callback);</p><p>ok,那么剩下的就是作用對象了,由之前的設(shè)計可知,在slider拖動時主要作用于2個對象,slider和completedbar,那么我們在jSlider插件末尾加上一段代碼來返回slider對象:</p><pre> <ol> <li>slider.data = { bar: sliderbar, completed: completedbar };  </li> <li>return slider;  </li> </ol></pre><p>這樣我們在初始化jSlider的時候就可以直接用一個變量來獲取jSlider對象,然后調(diào)用setSliderValue方法了,偽碼:</p><pre> <ol> <li>var slider = $.fn.jSlider({});  </li> <li>slider.setSliderValue(v,function(){});  </li> </ol></pre><p>setSliderValue代碼:</p><pre> <ol> <li>try {  </li> <li>    //validate  </li> <li>    if (typeof v == 'undefined' || v < 0 || v > 1) {  </li> <li>        throw new Error('\'v\' must be a Float variable between 0 and 1.');  </li> <li>    }  </li> <li> </li> <li>    var s = this;  </li> <li> </li> <li>    //validate   </li> <li>    if (typeof s == 'undefined' ||  </li> <li>        typeof s.data == 'undefined' ||  </li> <li>            typeof s.data.bar == 'undefined') {  </li> <li>        throw new Error('You bound the method to an object that is not a slider!');  </li> <li>    }  </li> <li> </li> <li>    $sliderProcess(s, s.data.completed, v * s.data.bar.width());  </li> <li> </li> <li>    if (typeof callback != 'undefined') { callback(v); }  </li> <li>}  </li> <li>catch (e) {  </li> <li>    alert(e.message);  </li> <li>}  </li> </ol></pre><p>這里同樣調(diào)用了全局Function $sliderProcess在設(shè)置slider的value值時進行completedbar[width]和slider[left]的更新。由于此處進行了異常處理,所以如果end-user在確保setSliderValue被作用于jSlider對象的時候可以刪除此異常處理代碼。</p><p>【皮膚】<br /> 根據(jù)jSlider的API我們可以更加方便的為其設(shè)定皮膚,為了讓jSlider更加專業(yè),我們需要2張圖片:</p><p> 用來作為completedbar背景的'bar'和用來作為slider背景的'slider',ok,我們更新下樣式:</p><pre> <ol> <li> /*----blue skin----*/  </li> <li>.bluebar  </li> <li>{  </li> <li>    margin-top: 10px;  </li> <li>    height: 4px;  </li> <li>    background:#F7F7F7;  </li> <li>    border:solid 1px #3e3e3e;  </li> <li>    position: relative;  </li> <li>    }  </li> <li>.bluebar .jquery-completed  </li> <li>{  </li> <li>    height: 4px;  </li> <li>    background:url(../images/slider/blue/bar.gif) left center no-repeat;  </li> <li>    top: 0;  </li> <li>    left:0;  </li> <li>    position: absolute;  </li> <li>    }  </li> <li>.bluebar .jquery-jslider  </li> <li>{  </li> <li>    height: 17px;  </li> <li>    background:url(../images/slider/blue/slider.gif) center 0 no-repeat;  </li> <li>    top: -4px;  </li> <li>    display: block;  </li> <li>    cursor: pointer;  </li> <li>    position: absolute;  </li> <li>    }  </li> <li>.bluebar .jquery-jslider-hover  </li> <li>{  </li> <li>    background-position:center -17px;  </li> <li>    }  </li> </ol></pre><p>由于在設(shè)置樣式時我仍然讓子節(jié)點樣式使用了API的默認(rèn)值,因此在創(chuàng)建jSlider時我們只需要設(shè)置barCssName就行了:</p><pre> <ol> <li>var blue = $.fn.jSlider({  </li> <li>    renderTo: '#slidercontainer',  </li> <li>    size: { barWidth: 500, sliderWidth: 10 },  </li> <li>    barCssName: 'bluebar',  </li> <li>    onChanging: function(percentage, e) {  </li> <li>        // code goes here  </li> <li>    }  </li> <li>});  </li> </ol></pre><p>呈現(xiàn)出來的UI:</p><p> 我們這樣來設(shè)置其值:</p><pre> <ol> <li>//set percentage with a callback function  </li> <li>blue.setSliderValue(0.65, function(percentage) {  </li> <li>    // code goes here  </li> <li>});  </li> </ol></pre><p>【通用性】<br /> 當(dāng)然,我們不僅可以將jSlider作為slider使用,有時候它也是一個progressbar: </p><p>(代碼我就不貼了,直接在demo里查看 ???? )</p><p>【小結(jié)】 <br /> 通篇到這里就結(jié)束了,簡單的介紹了一款jQuery插件的開發(fā)流程,以及開發(fā)中應(yīng)該注意的細(xì)節(jié),那么在下一篇的文章中我會向大家介紹如何打造一個通用型的 自動完成 插件。</p><p>live demo</p><p>source[google code]</p> <br> 網(wǎng)頁標(biāo)題:JQuery插件的開發(fā)真的有那么難嗎 <br> 標(biāo)題URL:<a href="http://www.5511xx.com/article/coheoii.html">http://www.5511xx.com/article/coheoii.html</a> </div> <div id="f78wjio" class="hot_new"> <div id="bc4hp6b" class="page_title clearfix"> <h3>其他資訊</h3> </div> <div id="jkj1lky" class="news_list clearfix"> <ul> <li> <a href="/article/dphhesp.html">Linux下實現(xiàn)輸出技術(shù)的優(yōu)化(linux輸出內(nèi)容)</a> </li><li> <a href="/article/dphhedg.html">不改變語言如何助推Java的不斷演進</a> </li><li> <a href="/article/dphhedo.html">織夢官方推薦:虛擬主機上線,輕松搭建網(wǎng)站!(織夢虛擬主機)</a> </li><li> <a href="/article/dphheec.html">Linux普通文件:操作指南及使用技巧(linux普通文件)</a> </li><li> <a href="/article/dphheeo.html">優(yōu)酷怎么下載視頻?(優(yōu)酷怎么下載視頻到本地)</a> </li> </ul> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <!-- 底部信息 --> <div id="d9o9xlc" class="footer wow fadeInUp"> <div id="nx7mkhz" class="rowFluid"> <div id="ozpel32" class="span12"> <div id="actsjap" class="container"> <div id="42x4uti" class="footer_content"> <div id="7642irs" class="span4 col-xm-12"> <div id="wx102qo" class="footer_list"> <div id="fppvgnl" class="span6"> <div id="pqgxnvd" class="bottom_logo"><img src="/Public/Home/images/ewm.jpg" alt="微信服務(wù)號二維碼" /></div> </div> <div id="opoo9kg" class="span6 col-xm-12"> <div id="mnvnltz" class="quick_navigation"> <div id="41jmcay" class="quick_navigation_title">快速導(dǎo)航</div> <ul> <li><a title="宜賓柴油發(fā)電機" target="_blank">宜賓柴油發(fā)電機</a></li><li><a title="四川柴油發(fā)電機保養(yǎng)" target="_blank">四川柴油發(fā)電機保養(yǎng)</a></li><li><a title="四川服務(wù)器租用" target="_blank">四川服務(wù)器租用</a></li><li><a title="資陽網(wǎng)站建設(shè)" target="_blank">資陽網(wǎng)站建設(shè)</a></li><li><a title="香港云服務(wù)器" target="_blank">香港云服務(wù)器</a></li><li><a title="電商網(wǎng)站建設(shè)" target="_blank">電商網(wǎng)站建設(shè)</a></li><li><a title="中國(西部)云計算中心" target="_blank">中國(西部)云計算中心</a></li><li><a title="廣告吸塑字" target="_blank">廣告吸塑字</a></li><li><a title="新都餐飲供應(yīng)" target="_blank">新都餐飲供應(yīng)</a></li><li><a title="成都標(biāo)志設(shè)計" target="_blank">成都標(biāo)志設(shè)計</a></li><li><a title="四川電信機房托管" target="_blank">四川電信機房托管</a></li> </ul> </div> </div> </div> </div> <div id="z3zabig" class="span4 col-xm-6 col-xs-12"> <div id="w9szxvk" class="footer_list"> <div id="xi3xynu" class="footer_link"> <div id="btkpow8" class="footer_link_title">友情鏈接</div> <ul id="frientLinks"> <a title="網(wǎng)站制作" target="_blank">網(wǎng)站制作</a> <a title="網(wǎng)站建設(shè)" target="_blank">網(wǎng)站建設(shè)</a> <a title="成都網(wǎng)絡(luò)推廣" target="_blank">網(wǎng)絡(luò)推廣</a> <a title="成都網(wǎng)站推廣" target="_blank">網(wǎng)站推廣</a> <a title="成都微信小程序開發(fā)" target="_blank">小程序開發(fā)</a> <a title="創(chuàng)新互聯(lián)網(wǎng)站欄目導(dǎo)航" target="_blank">網(wǎng)站導(dǎo)航</a> </ul> <div id="q4b8wec" class="footer_link_title">網(wǎng)站建設(shè)</div> <ul id="frientLinks"> <li><a href="/">四川平武建站</a></li> <li><a title="創(chuàng)新互聯(lián)網(wǎng)站欄目導(dǎo)航" target="_blank">網(wǎng)站導(dǎo)航</a></li> </ul> </div> </div> </div> <div id="l8gbb3b" class="span4 col-xm-6 col-xs-12"> <div id="yzzzpgx" class="footer_list"> <div id="x2cfvml" class="footer_cotact"> <div id="jltlid3" class="footer_cotact_title">聯(lián)系方式</div> <ul> <li><span id="wp9vdj9" class="footer_cotact_type">企業(yè):</span><span id="rtrrpaq" class="footer_cotact_content">四川綿陽平武網(wǎng)站建設(shè)工作室</span></li> <li><span id="vfmlb0b" class="footer_cotact_type">地址:</span><span id="rcaahpm" class="footer_cotact_content">成都市青羊區(qū)太升南路288號</span></li> <li><span id="442raz4" class="footer_cotact_type">電話:</span><span id="dn3si35" class="footer_cotact_content"><a href="tel:18980820575" class="call">18980820575</a></span></li> <li><span id="4527pp1" class="footer_cotact_type">網(wǎng)址:</span><span id="y4vqgov" class="footer_cotact_content"><a href="/" title="四川平武網(wǎng)站建設(shè)">www.5511xx.com</a></span></li> </ul> </div> </div> </div> </div> </div> <div id="jcbsaig" class="copyright"> <p>公司名稱:四川綿陽平武網(wǎng)站建設(shè)工作室 聯(lián)系電話:18980820575</p> <p><a target="_blank" rel="nofollow">網(wǎng)站備案號:蜀ICP備2024061352號-3</a></p> <p>四川平武建站 四川平武網(wǎng)站建設(shè) 四川平武網(wǎng)站設(shè)計 四川平武網(wǎng)站制作 <a target="_blank">成都做網(wǎng)站</a></p> </div> </div> </div> </div> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.5511xx.com/" title="日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区">日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区</a> <div class="friend-links"> <a href="http://www.stangekirke.net">黄色Av中文板狠狠干伊人|夜夜嗨AV综合黄色A毛片|无码成人AV在线看免费|日韩黄片免费试看|夜间视频无码日韩a片老牛|成人亚洲免费AV在线看|国产二区在线播放|成人嫩草AV网址|99视频偷拍偷拍|在线成人图片观看</a> <a href="http://www.annearundelcountylife.com">AV每日更新不卡|无码av丝袜高跟鞋|伊人视频精品久久亚洲国产|影音先锋日本无码|91色婷婷一区二区在线|免费不卡一区二区三区|国产精选无码AV|一区二区色情国产韩国精品一|在线播放av导航|成人无码视频在线看</a> <a href="http://www.thanxmkt.com">久草影视探花一级片少妇|综合色网在线播放|av天堂婷婷视频黄片|视频一区 国产精品|亚洲人成人毛片无遮挡|亚洲在线观看av在线观影|欧美特黄A级毛片|亚洲精品线路在线观看|日韩精品A片一区二区三区|亚洲岛国无码一区二区</a> </div> </div> </footer> <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body><div id="lsiwg" class="pl_css_ganrao" style="display: none;"><mark id="lsiwg"></mark><label id="lsiwg"><abbr id="lsiwg"><div id="lsiwg"></div></abbr></label><u id="lsiwg"></u><pre id="lsiwg"></pre><legend id="lsiwg"></legend><style id="lsiwg"></style><ins id="lsiwg"></ins><pre id="lsiwg"><bdo id="lsiwg"><b id="lsiwg"></b></bdo></pre><track id="lsiwg"><pre id="lsiwg"><style id="lsiwg"></style></pre></track><code id="lsiwg"><small id="lsiwg"><wbr id="lsiwg"></wbr></small></code><em id="lsiwg"></em><listing id="lsiwg"><del id="lsiwg"><p id="lsiwg"></p></del></listing><tr id="lsiwg"></tr><dfn id="lsiwg"></dfn><strike id="lsiwg"><label id="lsiwg"><rp id="lsiwg"></rp></label></strike><em id="lsiwg"></em><del id="lsiwg"></del><legend id="lsiwg"><nav id="lsiwg"><abbr id="lsiwg"></abbr></nav></legend><em id="lsiwg"><wbr id="lsiwg"><bdo id="lsiwg"></bdo></wbr></em><strike id="lsiwg"></strike><wbr id="lsiwg"></wbr><del id="lsiwg"><cite id="lsiwg"><abbr id="lsiwg"></abbr></cite></del><i id="lsiwg"></i><dfn id="lsiwg"></dfn><strong id="lsiwg"></strong><option id="lsiwg"><source id="lsiwg"><code id="lsiwg"></code></source></option><track id="lsiwg"></track><label id="lsiwg"></label><ol id="lsiwg"></ol><s id="lsiwg"></s><em id="lsiwg"><style id="lsiwg"><th id="lsiwg"></th></style></em><ruby id="lsiwg"><ol id="lsiwg"><label id="lsiwg"></label></ol></ruby><track id="lsiwg"></track><u id="lsiwg"></u><th id="lsiwg"><strong id="lsiwg"><ruby id="lsiwg"></ruby></strong></th><rp id="lsiwg"></rp><rp id="lsiwg"><dl id="lsiwg"><strong id="lsiwg"></strong></dl></rp><table id="lsiwg"><ins id="lsiwg"><cite id="lsiwg"></cite></ins></table><pre id="lsiwg"><s id="lsiwg"></s></pre><nav id="lsiwg"></nav><table id="lsiwg"><small id="lsiwg"><cite id="lsiwg"></cite></small></table><th id="lsiwg"></th><strong id="lsiwg"><abbr id="lsiwg"><ol id="lsiwg"></ol></abbr></strong><tbody id="lsiwg"><em id="lsiwg"><s id="lsiwg"></s></em></tbody><strong id="lsiwg"></strong><rp id="lsiwg"></rp><source id="lsiwg"></source><abbr id="lsiwg"><strike id="lsiwg"><menu id="lsiwg"></menu></strike></abbr><tbody id="lsiwg"></tbody></div> </html>