搜尋
首頁web前端js教程jquery中$.fn和圖片滾動效果實現方法

jquery中$.fn和圖片滾動效果實現方法

Jan 17, 2018 pm 02:01 PM
jquery實現效果

圖片滾動效果相信對大家來說都不陌生,爛大街的效果圖如下所示,js實現代碼很短,不過如果想做的話,必須掌握jquery、IIFE、setInterval等基礎以及$.fn用法:圖片滾動效果相信大家都使用過,看上去很簡單的一個效果,如果想熟練的掌握必須知道jquery、IIFE、setInterval等基礎以及$.fn用法,下面這篇文章主要介紹了關於jquery中$. fn和圖片滾動效果製作的必備知識,需要的朋友可以參考下。


jquery中$.fn用法

$.fn是jquery的命名空間,如果對jquery源碼有過學習,就不難發現原始碼中有如下程式碼:

jquery.fn=jquery.prototype={
 init:function(selector,context){
 /*
 *code
 */
 }
}

所以說jquery.fn也就是jquery.prototype的簡寫。我們的原始碼所呼叫的建構子jquery()實例實際上是jquery.fn.init()的實例。

程式碼如下:

jQuery = function( selector, context ) {
 //jqeruy内部使用new创建返回另一个构造函数实力是为了省去调用jquery时前面的new,并在后面定义了别名$;
 //构造函数jquery()调用的是构造函数jQuery.fn.init()的实例
 return new jQuery.fn.init( selector, context );
},/*code*/

之後後續程式碼有執行了jquery.fn.init.prototype=jquery.fn,用建構子jquery的原型物件覆蓋jquery.fn.init()的原型對象,使得jquery.fn.init實例也能存取jquery()的原型方法和屬性。

開發外掛程式的方法:用$.fn擴充jquery產生新的方法。

      1、可使用jquery.extend(object)擴充jquery類別本身,為類別新增新的方法。

      2、以jquery.fn.extend(object)為jquery物件新增方法。

下面用jquery.extend(object)擴充jquery類別,新增類別方法:

$.extent({ 
 add: function(a,b){
 return a+b;
 }
})

以後就可以直接使用$.add(1,2);//3

下面用jquery.fn.extend(object)對jquery.prototype擴充一個方法。

$.fn.extend({
 [函数名]:fucntion(){
 /*code*/
 }
});

以後可以直接使用$(“p”).函數名稱()。

使用jquery中的$.fn封裝一個圖片滾動插件

這是一個使用到爛大街的一個插件了,不用說也知道是什麼。不過具體是怎麼實現的,繼續往下看。這個外掛最主要的部分也就是js的實現,html和css很簡單,不贅述。如果下面一些知識點已經熟悉,可以選擇性跳過。

setInterval()

setInterval()可以依照指定時間不停的呼叫函數,直到呼叫clearInterval或關閉視窗。

setInterval(fucntion(){/*code*/},[time])
clearInterval(val_of_seInterval)//参数为setInterval的返回值

所以當我們製作圖片滾動時,當滑鼠指標在圖片上時,要停止圖片滾動,這裡設定很簡單,只要添加一個on('mouseup,mouseover',fucntion(){})事件即可;

具體實現程式碼如下:

var time=setInterval(picTime,par.time);
/*
*code
*/
$(this).on('mouseup,mouseover',fucntion(){
 clearInterval(time);
 })

保證圖片能夠一直循環滾動

在設計時,我們肯定不想圖片滾動完li.length張就沒了。所以要設置一個哨兵index。

var index=0;
fucntion picTime(){
 index++;
 if(index=li.length){
 index=0;
 }
 showpicture(index);
}

相同的在點擊上一張,下一張圖片時,我們也要設定一個哨兵,讓其能夠一直循環下去。

IIFE

你絕對想要當外掛程式在定義調用完,載入瀏覽器時,這個外掛效果可以立即呈現出來。那就要用到IIFE來建構這個插件,從來達到快速加載,不受其他程式碼幹擾的作用。由於js中,在括號中進行函數宣告無效,所以括號包起來的函數稱之為函數表達式。

IIFE的兩種形式如下:當圓括號出現在匿名函數的末端想要呼叫函數時,它會預設將函數當成是函數宣告。當圓括號包裹函數時,它會預設將函數作為表達式去解析,而不是函數宣告。

(function(){}());
(function(){})();

下面先來用牛客的一道題目來理解IIFE:

var myObject = { 
 foo: "bar", 
 func: function() { 
 var self = this; 
 console.log(this.foo); 
 console.log(self.foo); 
 (function() { 
 console.log(this.foo); 
 console.log(self.foo); 
 }()); 
}};
 myObject.func();

因為this指代的是myObject對象,所以第一個肯定輸出bar,而self是this的變量,等於是this,所以第二個輸出的還是bar,下面出現的就是我們上文定義的第一種IIFE形式,此時必須立即執行匿名函數,它的this指向的是window,所以輸出undefined,最後的self在自己的區塊級作用域沒有定義,所以向上找到父級作用域的self,因此第四個輸出的還是bar。

低配版圖片特效js程式碼

很多都加了註解:如果jquery、js上文的知識掌握紮實,肯定不是很難。

//$()调用jquery对象 ,IIFE
$(function () {
 $.fn.ScrollPic = function (params) {
 //
 return this.each(function () {
 var defaults = {
 ele: '.slider',//切换对象
 Time: '2000',//自动切换时间
 speed: '1000',//图片切换速度
 scroll: true,//是否滚动图片,虽然肯定是让它滚动的,但是我们还是设置一个意思一下。
 arrow: false,//是否设置箭头
 number: true//是否添加右下角数字
 };
 //定义默认参数,其中若在html页面设置了param是,这里的params会替换defaults
 var par = $.extend({}, defaults, params);
 var scrollList = $(this).find('ul');//找到ul标签元素
 var listLi = $(this).find('li');//找到li标签元素
 var index = 0;
 var pWidth = $(this).width();
 var pHeight = $(this).height();
 var len = $(this).find("li").length;//
  • 标签数量  //设置li标签和img的宽、高  listLi.css({ "width": pWidth, "height": pHeight });  listLi.find('img').css({ "width": pWidth, "height": pHeight });  //设置ul标签的宽值为li的len倍/overflow:hidden  scrollList.css("width", pWidth * len);  //图片循环滚动的关键所在  function picTimer() {  index++;  if (index == len) { index = 0; }  showPics(index);  }  //自动切换函数  if (par.scroll)  {  var time = setInterval(picTimer, par.Time);  } else {  $(".page-btn").hide();  }  function showPics(index) {  var nowLeft = -index * pWidth;  //添加向左移动的特效  $(this).find(scrollList).animate({ "left": nowLeft }, par.speed);  //找到与index相等的那个按钮,添加类名current,并将每个同胞元素移除类名current  $(this).find(paging).eq(index).addClass('current').siblings().removeClass('current');  }  //鼠标经过数字按钮的效果  if (par.number) {  $(this).append('

    ');  for (i = 1; i ' + i + '')  }  var paging = $(this).find(".page-btn span");  paging.eq(index).addClass('current');  $(this).find(paging).on('mouseup mouseover',function (e) {  e.preventDefault();  //获取按钮之间的相对位置,注意这里的$(this)。  index = $('p').find(paging).index($(this));  showPics(index)  });  }  //上一张,下一张效果  if (par.arrow) {  $(this).append('')  var prev = $(this).find('span.leftarrow');  var next = $(this).find('span.rightarrow');  prev.on('click',function (e){  e.preventDefault();  index -= 1;  if (index == -1) { index = len - 1; }  showPics(index);  });//上一页  next.on('click',function (e){  e.preventDefault();  index += 1;  if (index == len) { index = 0; }  showPics(index);  });  }  //停止图片的滚动  $(this).on('moveseup mouseover',function (e) {  clearInterval(time);  });  //清除计时器  $(this).on('mouseleave',function (e) {  if (par.scroll) { time = setInterval(picTimer, par.Time); } else { clearInterval(time); $(this).find('$(".page-btn")').hide() }  });  }) } });

    相關建議:

    【轉】 div+css的圖片滾動效果_html/css_WEB-ITnose

    ## jQuery+css實作圖片捲動效果(附原始碼)_jquery

    JS小功能(offsetLeft實作圖片捲動效果)實例程式碼_javascript技巧#######
  • 以上是jquery中$.fn和圖片滾動效果實現方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    Python vs. JavaScript:您應該學到哪種語言?Python vs. JavaScript:您應該學到哪種語言?May 03, 2025 am 12:10 AM

    選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

    JavaScript框架:為現代網絡開發提供動力JavaScript框架:為現代網絡開發提供動力May 02, 2025 am 12:04 AM

    JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

    JavaScript,C和瀏覽器之間的關係JavaScript,C和瀏覽器之間的關係May 01, 2025 am 12:06 AM

    引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

    node.js流帶打字稿node.js流帶打字稿Apr 30, 2025 am 08:22 AM

    Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

    Python vs. JavaScript:性能和效率注意事項Python vs. JavaScript:性能和效率注意事項Apr 30, 2025 am 12:08 AM

    Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

    JavaScript的起源:探索其實施語言JavaScript的起源:探索其實施語言Apr 29, 2025 am 12:51 AM

    JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

    幕後:什麼語言能力JavaScript?幕後:什麼語言能力JavaScript?Apr 28, 2025 am 12:01 AM

    JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

    Python和JavaScript的未來:趨勢和預測Python和JavaScript的未來:趨勢和預測Apr 27, 2025 am 12:21 AM

    Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。

    See all articles

    熱AI工具

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    免費脫衣圖片

    Clothoff.io

    Clothoff.io

    AI脫衣器

    Video Face Swap

    Video Face Swap

    使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

    熱工具

    SublimeText3漢化版

    SublimeText3漢化版

    中文版,非常好用

    MantisBT

    MantisBT

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

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

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

    mPDF

    mPDF

    mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

    Atom編輯器mac版下載

    Atom編輯器mac版下載

    最受歡迎的的開源編輯器