jQuery是目前使用最廣泛的JavaScript庫之一,提供了許多方便的函數(shù)和工具來簡(jiǎn)化Web開發(fā)。其中,$.fn是jQuery中一個(gè)十分重要的概念。
$.fn是一個(gè)指向jQuery原型對(duì)象的引用,它的作用是讓開發(fā)者可以在jQuery實(shí)例對(duì)象上擴(kuò)展自定義的方法。換句話說,通過給$.fn添加新的函數(shù),可以讓jQuery對(duì)象擁有更多的功能和行為。
$.fn的意義在于,它允許開發(fā)者在jQuery對(duì)象上進(jìn)行自由的擴(kuò)展和修改。舉個(gè)例子,假設(shè)有這樣的需求:在頁面上顯示一個(gè)滾動(dòng)通知,當(dāng)用戶點(diǎn)擊時(shí)可以停止?jié)L動(dòng),并且用戶可以通過滾動(dòng)條手動(dòng)控制滾動(dòng)速度。如果沒有$.fn的話,我們可能需要對(duì)jQuery對(duì)象進(jìn)行一些復(fù)雜的操作,但有了它,我們只需要編寫一個(gè)自定義的函數(shù),然后將它添加到$.fn中就可以了。以下是示例代碼:
$.fn.scrollNotice = function(options){ var _this = this; var defaults = { speed: 50 }; var settings = $.extend({}, defaults, options); var timer = null; var isPause = false; var $scrollBar = $('').prependTo(_this); var $scrollContent = $('').prependTo(_this); var height = $scrollContent.outerHeight(); var marginTop = 0; function startScroll(){ marginTop--; $scrollContent.css('margin-top', marginTop + 'px'); if(marginTop<= -height){ marginTop = 0; $scrollContent.css('margin-top', 0); } } _this.on('mouseenter', function(){ isPause = true; }).on('mouseleave', function(){ isPause = false; }); $scrollBar.on('mousedown', function(event){ var startY = event.clientY; var startMarginTop = marginTop; $(document).on('mousemove', function(event){ var moveY = event.clientY - startY; marginTop = startMarginTop + moveY; if(marginTop >0){ marginTop = 0; }else if(marginTop< -height){ marginTop = -height; } $scrollContent.css('margin-top', marginTop + 'px'); }).on('mouseup', function(){ $(this).off('mousemove mouseup'); }); return false; }); function loop(){ if(!isPause){ startScroll(); } timer = setTimeout(loop, settings.speed); } loop(); }; $('.notice').scrollNotice({ speed: 80 });
如上述代碼所示,我們編寫了一個(gè)名為scrollNotice的函數(shù),并將它添加到$.fn中。在函數(shù)內(nèi)部,我們創(chuàng)建了一個(gè)滾動(dòng)通知的效果,并支持鼠標(biāo)點(diǎn)擊停止?jié)L動(dòng)和鼠標(biāo)拖動(dòng)滾動(dòng)條手動(dòng)控制滾動(dòng)速度。
而在最后的調(diào)用代碼中,我們通過$('.notice').scrollNotice({...})的方式來調(diào)用該函數(shù),這樣就可以將scrollNotice的功能應(yīng)用到頁面上所有帶有notice類名的元素上。