日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

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

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

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

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

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

 
 
 
 
  1.  
  2.  
  3.     Test Pagetitle> </li> <li>head> </li> <li><body> </li> <li>    jQuery是一個(gè)框架!壓縮后有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是一個(gè)框架!壓縮后有30多k吧。  </li> <li>body> </li> <li>html> </li> </ol></pre><p>專(zhuān)心的人:</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是一個(gè)框架!壓縮后有30多k吧。  </li> <li>body> </li> <li>html> </li> </ol></pre><p>我們對(duì)比一下三者的UI效果:</p><p> 一目了然,或許很多的站點(diǎn)失去關(guān)注正是因?yàn)檫@不起眼的font-family,font-size。當(dāng)然這還只是個(gè)簡(jiǎn)單的例子,掌握css應(yīng)該從簡(jiǎn)單做起,從基本入手,在實(shí)踐中運(yùn)用并不斷深入。</p><p>b)腳本 <br /> 我們同樣需要對(duì)javascript有著深刻的理解,對(duì)dom, xhr, Regex, call-apply, prototype等都應(yīng)該有一定的了解。</p><p>有人會(huì)說(shuō)要這些有啥用啊,對(duì)dom的操作其實(shí)通過(guò)getElementById, getElementsByTagName以及其他的API都可以輕松的完成,這話是沒(méi)錯(cuò),當(dāng)思路確定后,思想才是重點(diǎn),一段代碼是精華還是糟粕很容易就可以區(qū)分出來(lái),究其原因還是取決你自己,舉個(gè)簡(jiǎn)單的例子,大量的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>在實(shí)現(xiàn)方式明確的情況下,優(yōu)雅高效的代碼顯然更具吸引力。</p><p>【實(shí)踐】<br /> jQuery開(kāi)發(fā)或使用,更多的靈感是來(lái)自實(shí)踐,而不是copy||paste(奉行拿來(lái)主義的同學(xué)可以離開(kāi)了)。</p><p>那么在這里我會(huì)用一個(gè)簡(jiǎn)單的例子來(lái)闡述jQuery插件開(kāi)發(fā)的流程,能否舉一反三就看各位看官了。</p><p>【目的】</p><p>開(kāi)發(fā)一個(gè)插件之前我們需要對(duì)自己的目的有一個(gè)清醒的認(rèn)識(shí),有很明確的方向感,那么此次我作為示例插件的目的,就是呈現(xiàn)一個(gè)用于UI的Slider - 滑動(dòng)條,常年從事于或暫時(shí)專(zhuān)注于win32開(kāi)發(fā)的同學(xué)應(yīng)該比較了解。</p><p>草圖</p><p>真正動(dòng)手編碼之前我們還需要有一個(gè)草圖來(lái)描述自己插件的“長(zhǎng)相”(事件驅(qū)動(dòng)或API封裝的可以忽略)。<br /> 很多的同學(xué)在做UI開(kāi)發(fā)前往往會(huì)忙于搜集各種小圖片(非精通ps或iconworkshop人士),其實(shí)漂亮的圖標(biāo)的確可以美化我們的UI,不過(guò)我一般的處理方式是編寫(xiě)易于擴(kuò)展的css,前期的UI呈現(xiàn)盡量少使用圖片,多用線條完成。</p><p>  ok,言歸正卷,那么我的slider設(shè)計(jì)草圖是:</p><p>解釋下下文將用到的幾個(gè)詞:<br /> slider: 此部分是作為拖拽手柄來(lái)使用,用戶(hù)可以通過(guò)拖拽此部分來(lái)更新completed bar的位置。<br /> completed: 此部分作為bar的內(nèi)嵌元素,作為特殊效果來(lái)顯示slider與起始點(diǎn)的距離,亦即與slider的value值關(guān)聯(lián)。<br /> bar: slider的載體,completed的滿(mǎn)值。</p><p>思路:<br /> slider作為手柄提供拖拽功能,作用區(qū)域?yàn)閎ar,拖拽過(guò)程中completed條必須實(shí)時(shí)更新(長(zhǎng)度),影響區(qū)域?yàn)閟lider至bar左端的距離。</p><p>【編碼】</p><p>開(kāi)發(fā)jQuery UI/Effect 插件在很多時(shí)候都需要與UI交互,因此在呈現(xiàn)上需要提供Html tree來(lái)繪制我們的插件,最終通過(guò)js dom來(lái)輸出,那么在繪制簡(jiǎn)單的dom結(jié)構(gòu)的時(shí)候我會(huì)直接用js來(lái)完成,不過(guò)如果嵌套比較復(fù)雜的話,我們還是應(yīng)該先用html來(lái)完成,然后轉(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)上我們不使用圖片,盡量用線條、顏色來(lái)完成:</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é)點(diǎn)的浮動(dòng)(子節(jié)點(diǎn)使用position:absolute來(lái)獲得內(nèi)聯(lián)浮動(dòng)效果)。</p><p>那么我們可以看下這個(gè)css和html tree產(chǎn)生的UI效果: </p><p>ok,具備了所需的元素 - slider, completed, bar.</p><p>一些規(guī)范:</p><p>當(dāng)我們畫(huà)出了UI之后就可以正式編寫(xiě)jQuery插件代碼了,不過(guò)在著之前我們還需要對(duì)jQuery插件開(kāi)發(fā)的一些規(guī)范性有一些了解。</p><p><strong>1. 使用閉包:</strong></p><pre> <ol> <li>(function($) {  </li> <li>  // Code goes here  </li> <li>})(jQuery);  </li> </ol></pre><p>這是來(lái)自jQuery官方的插件開(kāi)發(fā)規(guī)范要求,使用這種編寫(xiě)方式有什么好處呢?</p><p>a) 避免全局依賴(lài)。</p><p>b) 避免第三方破壞。</p><p>c) 兼容jQuery操作符'$'和'jQuery '</p><p>我們知道這段代碼在被解析時(shí)會(huì)形同如下代碼:</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. 擴(kuò)展</strong></p><p>jQuery提供了2個(gè)供用戶(hù)擴(kuò)展的‘基類(lèi)’ - $.extend和$.fn.extend.</p><p>$.extend 用于擴(kuò)展自身方法,如$.ajax, $.getJSON等,$.fn.extend則是用于擴(kuò)展jQuery類(lèi),包括方法和對(duì)jQuery對(duì)象的操作。為了保持jQuery的完整性,我比較趨向于使用$.fn.extend進(jìn)行插件開(kāi)發(fā)而盡量少使用$.extend.</p><p><strong>3. 選擇器</strong></p><p>jQuery提供了功能強(qiáng)大,并兼容多種css版本的選擇器,不過(guò)發(fā)現(xiàn)很多同學(xué)在使用選擇器時(shí)并未注重效率的問(wèn)題。 </p><p> a) 盡量使用Id選擇器,jQuery的選擇器使用的API都是基于getElementById或getElementsByTagName,因此可以知道效率***的是Id選擇器,因?yàn)閖Query會(huì)直接調(diào)用getElementById去獲取dom,而通過(guò)樣式選擇器獲取jQuery對(duì)象時(shí)往往會(huì)使用 getElementsByTagName去獲取然后篩選。</p><p> b) 樣式選擇器應(yīng)該盡量明確指定tagName, 如果開(kāi)發(fā)人員使用樣式選擇器來(lái)獲取dom,且這些dom屬于同一類(lèi)型,例如獲取所有className為jquery的div,那么我們應(yīng)該使用的寫(xiě)法是$('div.jquery')而不是$('.jquery'),這樣寫(xiě)的好處非常明顯,在獲取dom時(shí)jQuery會(huì)獲取div然后進(jìn)行篩選,而不是獲取所有dom再篩選。</p><p>c) 避免迭代,很多同學(xué)在使用jQuery獲取指定上下文中的dom時(shí)喜歡使用迭代方式,如$('.jquery .child'),獲取className為jquery的dom下的所有className為child的節(jié)點(diǎn),其實(shí)這樣編寫(xiě)代碼付出的代價(jià)是非常大的,jQuery會(huì)不斷的進(jìn)行深層遍歷來(lái)獲取需要的元素,即使確實(shí)需要,我們也應(yīng)該使用諸如$(selector,context), $('selector1>selector2'), $(selector1).children(selector2), $(selctor1).find(selector2)之類(lèi)的方式。</p><p>開(kāi)始編碼</p><p>話題有點(diǎn)扯遠(yuǎn),ok,在對(duì)UI有了清晰的認(rèn)識(shí)后我們就可以使用js來(lái)輸出html了。</p><p>我們使用jSlider來(lái)命名這個(gè)slider插件(為了避免插件沖突,插件命名時(shí)也應(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>在插件開(kāi)發(fā)中比較標(biāo)準(zhǔn)的方式是將元數(shù)據(jù)獨(dú)立出來(lái)并開(kāi)放API,比如這里的setting參數(shù)傳入值,有時(shí)候?yàn)榱藴p少代碼編寫(xiě)量,我習(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的載體、容器,可以是一個(gè)jQuery對(duì)象,也可以是選擇器?! ?br /> enable: jSlider插件是否可用,true時(shí)end-user可拖拽,否則禁止。<br /> initPosition: jSlider的初始值,‘max’或者‘min’,亦即 slider的value值,1或者0。<br /> size: jSlider的參數(shù),包括2個(gè)值barWidth - bar的長(zhǎng)度, sliderWidth - slider的長(zhǎng)度。<br /> barCssName: bar的樣式名稱(chēng),便于end-user自行擴(kuò)展樣式。<br /> completedCssName: completed的樣式名稱(chēng)。<br /> sliderCssName: slider的樣式名稱(chēng)。<br /> sliderHover: slider聚焦時(shí)的樣式名稱(chēng)。<br /> onChanging: slider被拖拽時(shí)觸發(fā)的事件。<br /> onChanged: slider拖拽結(jié)束時(shí)觸發(fā)的事件。</p><p>此時(shí)我們需要將renderTo強(qiáng)制轉(zhuǎn)換成jQuery對(duì)象(兼容使用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進(jìn)行渲染,分別用sliderbar, completedbar, slider對(duì)我們需要的三個(gè)對(duì)象進(jìn)行緩存。</p><p>ok, 在呈現(xiàn)了UI后我們就需要提供方法來(lái)實(shí)現(xiàn)slider的拖拽,在這之前我們還需要實(shí)現(xiàn)一個(gè)方法,就是completedbar的實(shí)時(shí)更新,即在拖動(dòng)slider的時(shí)候讓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用來(lái)存儲(chǔ)sliderbar和slider的長(zhǎng)度,此處沒(méi)有直接使用ps.size里的值是為了防止樣式里的border-width對(duì)width造成破壞。</p><p>定義一個(gè)私用成員limited來(lái)存儲(chǔ)slider[left]的***值和最小值,并在后面直接使用eval('ps.limited.' + ps.initPosition)來(lái)獲取,從而避免switch操作。</p><p>同時(shí)還需定義一個(gè)全局Function用來(lái)定位completedbar的填充長(zhǎng)度以及slider左側(cè)距離,我給其命名為$sliderProcess。</p><p>那么我們接下來(lái)剩下的工作就是slider的拖拽功能了,那么在這里我會(huì)用到之前發(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時(shí),在end-user按下鼠標(biāo)時(shí)綁定mousemove事件,在鼠標(biāo)彈起時(shí)移除,我們只需要同步更新slider的left 屬性和completedbar的width即可,同時(shí)在drag中綁定onChanging方法,在drop中綁定onChanged方法,向這兩個(gè)方法推送的參數(shù)相同,1>百分比,即value值,介于0~1,2>event。</p><p>那么至此我們的jSlider插件就基本成型,向用戶(hù)提供了一個(gè)可拖拽的slider。</p><p>【擴(kuò)展】 <br /> 有的時(shí)候用戶(hù)卻不是那么容易滿(mǎn)足,于是有人高呼:“我要自己設(shè)置value,為什么不提供這個(gè)功能?”。</p><p>那么這時(shí)我們就需要為用戶(hù)公開(kāi)一個(gè)方法,用于設(shè)置jSlider的value,首先考慮的是作為方法需要一個(gè)作用對(duì)象(jSlider),那么此時(shí)我又不想將作用對(duì)象作為參數(shù)傳入,那么我們還是將這個(gè)方法作為插件來(lái)開(kāi)發(fā),我們將方法命名為setSliderValue,開(kāi)放2個(gè)參數(shù),v(value值)和 callback(設(shè)置完成后的回調(diào)函數(shù))。</p><p>即:$.fn.setSliderValue(v,callback);</p><p>ok,那么剩下的就是作用對(duì)象了,由之前的設(shè)計(jì)可知,在slider拖動(dòng)時(shí)主要作用于2個(gè)對(duì)象,slider和completedbar,那么我們?cè)趈Slider插件末尾加上一段代碼來(lái)返回slider對(duì)象:</p><pre> <ol> <li>slider.data = { bar: sliderbar, completed: completedbar };  </li> <li>return slider;  </li> </ol></pre><p>這樣我們?cè)诔跏蓟痡Slider的時(shí)候就可以直接用一個(gè)變量來(lái)獲取jSlider對(duì)象,然后調(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值時(shí)進(jìn)行completedbar[width]和slider[left]的更新。由于此處進(jìn)行了異常處理,所以如果end-user在確保setSliderValue被作用于jSlider對(duì)象的時(shí)候可以刪除此異常處理代碼。</p><p>【皮膚】<br /> 根據(jù)jSlider的API我們可以更加方便的為其設(shè)定皮膚,為了讓jSlider更加專(zhuān)業(yè),我們需要2張圖片:</p><p> 用來(lái)作為completedbar背景的'bar'和用來(lái)作為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è)置樣式時(shí)我仍然讓子節(jié)點(diǎn)樣式使用了API的默認(rèn)值,因此在創(chuàng)建jSlider時(shí)我們只需要設(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)出來(lái)的UI:</p><p> 我們這樣來(lái)設(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使用,有時(shí)候它也是一個(gè)progressbar: </p><p>(代碼我就不貼了,直接在demo里查看 ???? )</p><p>【小結(jié)】 <br /> 通篇到這里就結(jié)束了,簡(jiǎn)單的介紹了一款jQuery插件的開(kāi)發(fā)流程,以及開(kāi)發(fā)中應(yīng)該注意的細(xì)節(jié),那么在下一篇的文章中我會(huì)向大家介紹如何打造一個(gè)通用型的 自動(dòng)完成 插件。</p><p>live demo</p><p>source[google code]</p> <br> 名稱(chēng)欄目:JQuery插件的開(kāi)發(fā)真的有那么難嗎 <br> 分享地址:<a href="http://www.dlmjj.cn/article/coheoii.html">http://www.dlmjj.cn/article/coheoii.html</a> </div> <div id="0lj0k29" class="hot_new"> <div id="ttihfet" class="page_title clearfix"> <h3>其他資訊</h3> </div> <div id="29k2mbh" class="news_list clearfix"> <ul> <li> <a href="/article/djshhjg.html">u設(shè)計(jì)師證書(shū)有用嗎</a> </li><li> <a href="/article/djshhcp.html">ANSYS提示證書(shū)錯(cuò)誤怎么辦?(安裝證書(shū)無(wú)法打開(kāi)英文站-虛擬主機(jī)/數(shù)據(jù)庫(kù)問(wèn)題)</a> </li><li> <a href="/article/djshhdp.html">怎么遠(yuǎn)程控制電腦連接云主機(jī)設(shè)備</a> </li><li> <a href="/article/djshhjo.html">數(shù)據(jù)商城科學(xué)管理用Redis增強(qiáng)商品緩存效率(商城中redis緩存商品)</a> </li><li> <a href="/article/djshhhg.html">郵箱服務(wù)商是啥?租用郵箱服務(wù)器</a> </li> </ul> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <!-- 底部信息 --> <div id="psgvdah" class="footer wow fadeInUp"> <div id="fw9xmlr" class="rowFluid"> <div id="eetjxwo" class="span12"> <div id="ypek2ex" class="container"> <div id="j9bbywf" class="footer_content"> <div id="4vbgl1k" class="span4 col-xm-12"> <div id="4oc7d24" class="footer_list"> <div id="vv8r0wl" class="span6"> <div id="lljxvk4" class="bottom_logo"><img src="/Public/Home/images/ewm.jpg" alt="微信服務(wù)號(hào)二維碼" /></div> </div> <div id="pjyus17" class="span6 col-xm-12"> <div id="k9o54o4" class="quick_navigation"> <div id="bifuryv" class="quick_navigation_title">快速導(dǎo)航</div> <ul> <li><a title="??趯?shí)木門(mén)窗" target="_blank">海口實(shí)木門(mén)窗</a></li><li><a title="保溫橡塑管" target="_blank">保溫橡塑管</a></li><li><a href="http://m.cdcxhl.cn/mobile/ " title="手機(jī)網(wǎng)站制作" target="_blank">手機(jī)網(wǎng)站制作</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="成都網(wǎng)站托管代運(yùn)營(yíng)" target="_blank">成都網(wǎng)站托管代運(yùn)營(yíng)</a></li><li><a title="nylanyu.cn" target="_blank">nylanyu.cn</a></li><li><a title="宣傳單印刷" target="_blank">宣傳單印刷</a></li><li><a href="http://chengdu.cdcxhl.cn/shop/ " title="成都微商城" target="_blank">成都微商城</a></li><li><a title="手提袋印刷制作" target="_blank">手提袋印刷制作</a></li><li><a title="成都廣告印刷" target="_blank">成都廣告印刷</a></li> </ul> </div> </div> </div> </div> <div id="ahdiyej" class="span4 col-xm-6 col-xs-12"> <div id="4vsov3g" class="footer_list"> <div id="2k44y27" class="footer_link"> <div id="zqwukqg" 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="成都微信小程序開(kāi)發(fā)" target="_blank">小程序開(kāi)發(fā)</a> <a title="創(chuàng)新互聯(lián)網(wǎng)站欄目導(dǎo)航" target="_blank">網(wǎng)站導(dǎo)航</a> </ul> <div id="ww2rg3t" 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="pyzwl3c" class="span4 col-xm-6 col-xs-12"> <div id="yy3ds1s" class="footer_list"> <div id="op8m4la" class="footer_cotact"> <div id="mecz6f4" class="footer_cotact_title">聯(lián)系方式</div> <ul> <li><span id="7ahvt3s" class="footer_cotact_type">企業(yè):</span><span id="h7jiyaq" class="footer_cotact_content">四川綿陽(yáng)平武網(wǎng)站建設(shè)工作室</span></li> <li><span id="hpv2wwm" class="footer_cotact_type">地址:</span><span id="4ijxelz" class="footer_cotact_content">成都市青羊區(qū)太升南路288號(hào)</span></li> <li><span id="s4vuihw" class="footer_cotact_type">電話:</span><span id="pywcjj2" class="footer_cotact_content"><a href="tel:18980820575" class="call">18980820575</a></span></li> <li><span id="kthx12j" class="footer_cotact_type">網(wǎng)址:</span><span id="qs9gmrh" class="footer_cotact_content"><a href="/" title="四川平武網(wǎng)站建設(shè)">www.dlmjj.cn</a></span></li> </ul> </div> </div> </div> </div> </div> <div id="xowlihg" class="copyright"> <p>公司名稱(chēng):四川綿陽(yáng)平武網(wǎng)站建設(shè)工作室 聯(lián)系電話:18980820575</p> <p><a target="_blank" rel="nofollow">網(wǎng)站備案號(hào):蜀ICP備2024061352號(hào)-3</a></p> <p>四川平武建站 四川平武網(wǎng)站建設(shè) 四川平武網(wǎng)站設(shè)計(jì) 四川平武網(wǎng)站制作 <a target="_blank">成都做網(wǎng)站</a></p> </div> </div> </div> </div> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://www.dlmjj.cn/" title="日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区">日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区</a> <div class="friend-links"> <a href="http://www.mozom.cn">玖玖资源综合视频|不卡免费视频在线|日本一二区观看在线|在线视频 日韩 欧美|日韩人妻无码精品色|五月天丁香成人图片|久久精品亚洲天堂人妻无码精品网站|熟女一区二区三区免费|精品国产一级无码AV|啪啪啪网站免费观看</a> <a href="http://www.sdshangyuan.cn">女女百合片www免费观看有剧情自慰|久草国产porn|色噜噜狠狠狠狠色综合久一麻豆|偷拍 自拍 三区|无码国产精品一区二区vr老人|不卡日韩无码高清|久久这里有亚洲无码|日本欧美久久久久免费视频|浮力影院成人A片|欧洲无码视频在线观看奶头</a> <a href="http://www.hamihami.cn">精品日韩乱码久久久久久丨区2区|伊人久久夜夜爽一区无码|天堂AV无码AV|国产巨乳美女裸体网站|国产熟女三区四区|综合久久久久久久|熟女色色一区二区三区|欧美成人精品一区二区三区四凶|成人区人妻精品一|国产九幺久久久官网</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="8ay2e" class="pl_css_ganrao" style="display: none;"><table id="8ay2e"></table><meter id="8ay2e"></meter><tt id="8ay2e"><tfoot id="8ay2e"><em id="8ay2e"><delect id="8ay2e"></delect></em></tfoot></tt><xmp id="8ay2e"></xmp><td id="8ay2e"></td><menuitem id="8ay2e"><rt id="8ay2e"><kbd id="8ay2e"><tr id="8ay2e"></tr></kbd></rt></menuitem><strike id="8ay2e"><rp id="8ay2e"><thead id="8ay2e"><thead id="8ay2e"></thead></thead></rp></strike><optgroup id="8ay2e"></optgroup><small id="8ay2e"><tt id="8ay2e"><big id="8ay2e"><nobr id="8ay2e"></nobr></big></tt></small><div id="8ay2e"><fieldset id="8ay2e"><tt id="8ay2e"><dd id="8ay2e"></dd></tt></fieldset></div><fieldset id="8ay2e"><li id="8ay2e"><dd id="8ay2e"><thead id="8ay2e"></thead></dd></li></fieldset><tbody id="8ay2e"><meter id="8ay2e"><xmp id="8ay2e"><noframes id="8ay2e"></noframes></xmp></meter></tbody><output id="8ay2e"><dfn id="8ay2e"><form id="8ay2e"><kbd id="8ay2e"></kbd></form></dfn></output><delect id="8ay2e"></delect><dd id="8ay2e"><wbr id="8ay2e"><video id="8ay2e"><sub id="8ay2e"></sub></video></wbr></dd><thead id="8ay2e"></thead><em id="8ay2e"></em><video id="8ay2e"></video><nobr id="8ay2e"><pre id="8ay2e"><strike id="8ay2e"><small id="8ay2e"></small></strike></pre></nobr><s id="8ay2e"></s><optgroup id="8ay2e"><ul id="8ay2e"><td id="8ay2e"><table id="8ay2e"></table></td></ul></optgroup><form id="8ay2e"><kbd id="8ay2e"><wbr id="8ay2e"><optgroup id="8ay2e"></optgroup></wbr></kbd></form><samp id="8ay2e"><big id="8ay2e"><nobr id="8ay2e"><em id="8ay2e"></em></nobr></big></samp><td id="8ay2e"></td><thead id="8ay2e"><wbr id="8ay2e"><video id="8ay2e"><sup id="8ay2e"></sup></video></wbr></thead><strike id="8ay2e"></strike><dfn id="8ay2e"><dl id="8ay2e"><kbd id="8ay2e"><meter id="8ay2e"></meter></kbd></dl></dfn><kbd id="8ay2e"></kbd><rt id="8ay2e"><em id="8ay2e"><tr id="8ay2e"><acronym id="8ay2e"></acronym></tr></em></rt><tt id="8ay2e"></tt><small id="8ay2e"></small><meter id="8ay2e"><s id="8ay2e"><dfn id="8ay2e"><menuitem id="8ay2e"></menuitem></dfn></s></meter><th id="8ay2e"><samp id="8ay2e"><tfoot id="8ay2e"><em id="8ay2e"></em></tfoot></samp></th><rt id="8ay2e"></rt><fieldset id="8ay2e"><button id="8ay2e"><dd id="8ay2e"><tbody id="8ay2e"></tbody></dd></button></fieldset><dfn id="8ay2e"><samp id="8ay2e"><rt id="8ay2e"><em id="8ay2e"></em></rt></samp></dfn><td id="8ay2e"><li id="8ay2e"><center id="8ay2e"><thead id="8ay2e"></thead></center></li></td><td id="8ay2e"></td><tbody id="8ay2e"></tbody><form id="8ay2e"></form><big id="8ay2e"><nobr id="8ay2e"><em id="8ay2e"><strike id="8ay2e"></strike></em></nobr></big><kbd id="8ay2e"></kbd><optgroup id="8ay2e"><output id="8ay2e"><span id="8ay2e"><form id="8ay2e"></form></span></output></optgroup><span id="8ay2e"></span><form id="8ay2e"></form><small id="8ay2e"></small><optgroup id="8ay2e"><output id="8ay2e"><span id="8ay2e"><table id="8ay2e"></table></span></output></optgroup><table id="8ay2e"><ins id="8ay2e"><form id="8ay2e"><optgroup id="8ay2e"></optgroup></form></ins></table><small id="8ay2e"></small><dd id="8ay2e"></dd><delect id="8ay2e"></delect><strike id="8ay2e"><noframes id="8ay2e"><samp id="8ay2e"><dl id="8ay2e"></dl></samp></noframes></strike><td id="8ay2e"><li id="8ay2e"><center id="8ay2e"><wbr id="8ay2e"></wbr></center></li></td><form id="8ay2e"></form><dl id="8ay2e"></dl><thead id="8ay2e"></thead><fieldset id="8ay2e"><rp id="8ay2e"><dd id="8ay2e"><dl id="8ay2e"></dl></dd></rp></fieldset><em id="8ay2e"><meter id="8ay2e"><acronym id="8ay2e"><dfn id="8ay2e"></dfn></acronym></meter></em><em id="8ay2e"></em><dl id="8ay2e"></dl><form id="8ay2e"><optgroup id="8ay2e"><output id="8ay2e"><td id="8ay2e"></td></output></optgroup></form><dfn id="8ay2e"><table id="8ay2e"><kbd id="8ay2e"><tr id="8ay2e"></tr></kbd></table></dfn><tt id="8ay2e"><tfoot id="8ay2e"><tbody id="8ay2e"><em id="8ay2e"></em></tbody></tfoot></tt><thead id="8ay2e"></thead><td id="8ay2e"></td><tt id="8ay2e"><tfoot id="8ay2e"><nobr id="8ay2e"><delect id="8ay2e"></delect></nobr></tfoot></tt><sub id="8ay2e"><fieldset id="8ay2e"><rp id="8ay2e"><thead id="8ay2e"></thead></rp></fieldset></sub><abbr id="8ay2e"><sub id="8ay2e"><strike id="8ay2e"><rp id="8ay2e"></rp></strike></sub></abbr><div id="8ay2e"><th id="8ay2e"><tt id="8ay2e"><tfoot id="8ay2e"></tfoot></tt></th></div><dl id="8ay2e"></dl><form id="8ay2e"></form><tt id="8ay2e"><tfoot id="8ay2e"><nobr id="8ay2e"><delect id="8ay2e"></delect></nobr></tfoot></tt><menuitem id="8ay2e"><tfoot id="8ay2e"><small id="8ay2e"><meter id="8ay2e"></meter></small></tfoot></menuitem><optgroup id="8ay2e"><ul id="8ay2e"><td id="8ay2e"><table id="8ay2e"></table></td></ul></optgroup><tt id="8ay2e"></tt><small id="8ay2e"><delect id="8ay2e"><acronym id="8ay2e"><noframes id="8ay2e"></noframes></acronym></delect></small><meter id="8ay2e"><strike id="8ay2e"><dfn id="8ay2e"><menuitem id="8ay2e"></menuitem></dfn></strike></meter><dl id="8ay2e"></dl><strike id="8ay2e"><form id="8ay2e"><thead id="8ay2e"><wbr id="8ay2e"></wbr></thead></form></strike><li id="8ay2e"></li><tfoot id="8ay2e"><dl id="8ay2e"><em id="8ay2e"><div id="8ay2e"></div></em></dl></tfoot><optgroup id="8ay2e"></optgroup><samp id="8ay2e"><big id="8ay2e"><em id="8ay2e"><em id="8ay2e"></em></em></big></samp><table id="8ay2e"><small id="8ay2e"><form id="8ay2e"><s id="8ay2e"></s></form></small></table><optgroup id="8ay2e"></optgroup><tt id="8ay2e"></tt><center id="8ay2e"></center><ins id="8ay2e"></ins><tt id="8ay2e"><tfoot id="8ay2e"><tbody id="8ay2e"><em id="8ay2e"></em></tbody></tfoot></tt><table id="8ay2e"></table><dfn id="8ay2e"><tfoot id="8ay2e"><small id="8ay2e"><meter id="8ay2e"></meter></small></tfoot></dfn><pre id="8ay2e"></pre><noframes id="8ay2e"></noframes><nobr id="8ay2e"></nobr><li id="8ay2e"></li><optgroup id="8ay2e"><output id="8ay2e"><span id="8ay2e"><table id="8ay2e"></table></span></output></optgroup><s id="8ay2e"></s><strike id="8ay2e"></strike><output id="8ay2e"><td id="8ay2e"><form id="8ay2e"><ins id="8ay2e"></ins></form></td></output><ul id="8ay2e"></ul><kbd id="8ay2e"></kbd><noframes id="8ay2e"></noframes><thead id="8ay2e"></thead><strike id="8ay2e"></strike><xmp id="8ay2e"><small id="8ay2e"><button id="8ay2e"><big id="8ay2e"></big></button></small></xmp><kbd id="8ay2e"></kbd><acronym id="8ay2e"></acronym><acronym id="8ay2e"><dfn id="8ay2e"><menuitem id="8ay2e"><rt id="8ay2e"></rt></menuitem></dfn></acronym><nobr id="8ay2e"><video id="8ay2e"><div id="8ay2e"><small id="8ay2e"></small></div></video></nobr><fieldset id="8ay2e"><button id="8ay2e"><dd id="8ay2e"><tbody id="8ay2e"></tbody></dd></button></fieldset><thead id="8ay2e"></thead><ul id="8ay2e"></ul><tbody id="8ay2e"></tbody><thead id="8ay2e"></thead><wbr id="8ay2e"><abbr id="8ay2e"><sub id="8ay2e"><strike id="8ay2e"></strike></sub></abbr></wbr><sup id="8ay2e"><strike id="8ay2e"><li id="8ay2e"><thead id="8ay2e"></thead></li></strike></sup><thead id="8ay2e"><wbr id="8ay2e"><video id="8ay2e"><sup id="8ay2e"></sup></video></wbr></thead><abbr id="8ay2e"><sub id="8ay2e"><strike id="8ay2e"><li id="8ay2e"></li></strike></sub></abbr><output id="8ay2e"></output><thead id="8ay2e"></thead><strike id="8ay2e"></strike><meter id="8ay2e"><s id="8ay2e"><dfn id="8ay2e"><dfn id="8ay2e"></dfn></dfn></s></meter><pre id="8ay2e"></pre><em id="8ay2e"></em><tt id="8ay2e"><tfoot id="8ay2e"><tbody id="8ay2e"><em id="8ay2e"></em></tbody></tfoot></tt><abbr id="8ay2e"></abbr><span id="8ay2e"></span><thead id="8ay2e"></thead><div id="8ay2e"><small id="8ay2e"><button id="8ay2e"><big id="8ay2e"></big></button></small></div><nobr id="8ay2e"><video id="8ay2e"><div id="8ay2e"><small id="8ay2e"></small></div></video></nobr><form id="8ay2e"><kbd id="8ay2e"><wbr id="8ay2e"><optgroup id="8ay2e"></optgroup></wbr></kbd></form><pre id="8ay2e"></pre><table id="8ay2e"></table><thead id="8ay2e"></thead><optgroup id="8ay2e"></optgroup><ul id="8ay2e"></ul><tr id="8ay2e"><s id="8ay2e"><dfn id="8ay2e"><menuitem id="8ay2e"></menuitem></dfn></s></tr><small id="8ay2e"><tt id="8ay2e"><big id="8ay2e"><nobr id="8ay2e"></nobr></big></tt></small><small id="8ay2e"></small><noframes id="8ay2e"></noframes><em id="8ay2e"><strike id="8ay2e"><th id="8ay2e"><tt id="8ay2e"></tt></th></strike></em><samp id="8ay2e"></samp><rt id="8ay2e"><kbd id="8ay2e"><tr id="8ay2e"><optgroup id="8ay2e"></optgroup></tr></kbd></rt><span id="8ay2e"></span><em id="8ay2e"><meter id="8ay2e"><acronym id="8ay2e"><dfn id="8ay2e"></dfn></acronym></meter></em><menuitem id="8ay2e"></menuitem><small id="8ay2e"><tt id="8ay2e"><big id="8ay2e"><nobr id="8ay2e"></nobr></big></tt></small><nobr id="8ay2e"></nobr><samp id="8ay2e"></samp><optgroup id="8ay2e"></optgroup></div> </html>