AJax技术

jQuery基礎教程 · 摘要(5)

字号+ 作者:H5之家 来源:H5之家 2018-03-30 16:08 我要评论( )

對于僅限于個人使用的函數,一般來說還是把它保存在項目的命名空間中最方便。換句話說,不要保存在 jQuery 命名空間中,而要選擇一個我們自己的全局對象。比如說,可以將 ljQ 作為全局對象,那么 $.mathUtils.sum()

對于僅限于個人使用的函數,一般來說還是把它保存在項目的命名空間中最方便。換句話說,不要保存在 jQuery 命名空間中,而要選擇一個我們自己的全局對象。比如說,可以將 ljQ 作為全局對象,那么 $.mathUtils.sum() 和$.mathUtils.average() 就 要 寫 成 ljQ.mathUtils.sum() 和 ljQ.math-Utils.average() 了。這樣,就可以徹底避免自定義的插件方法與第三方插件方法發生命名沖突。

三十五、添加 jQuery 對象方法
添加全局函數需要以新方法來擴展 jQuery 對象。添加實例方法也與此類似,但擴展的卻是 jQuery.fn 對象:

jQuery.fn.myMethod = function() { alert('Nothing happens.'); };

jQuery.fn 對象是 jQuery.prototype 的別名,使用別名是出于簡潔的考慮。一個合理的實例方法應該包含對它的上下文的操作。

在任何插件方法內部,關鍵字 this 引用的都是當前的jQuery對象。因而,可以在 this 上面調用任何內置的jQuery方法,或者提取它包含的DOM節點并操作該節點。在調用的 .each() 方法內部, this 依次引用每個DOM元素。

除了隱式迭代之外,jQuery用戶也應該能夠正常使用連綴行為。因而,我們必須在所有插件方法中返回一個jQuery對象,除非相應的方法明顯用于取得不同的資訊。返回的jQuery對象通常就是 this 所引用的對象。

(function($) { $.fn.swapClass = function(class1, class2) { return this.each(function() { var $element = $(this); if ($element.hasClass(class1)) { $element.removeClass(class1).addClass(class2); } else if ($element.hasClass(class2)) { $element.removeClass(class2).addClass(class1); } }); }; })(jQuery);

三十六、由于某些瀏覽器中的 scroll 事件會在窗口滾動期間重復觸發,因此計算過程會不斷累積。最終結果就是導致頁面忽急忽緩、反應遲頓。

瀏覽器中有幾個原生事件都會頻繁觸發。最常見的事件有 scroll 、resize 和 mousemove 。為了解決這個問題,就需要節流事件。這個技術會限制一些無謂的計算,即不是每次事件發生都計算,而是選擇在部分事件發生時計算。

$(document).ready(timer = 0; $(window).scroll((!timer) { timer = setTimeout(function() { checkScrollPosition(); timer = 0; }, 250); } }).trigger('scroll'); });

前面這種節流技術可以說既簡單又實用。但是,節流的方案可不止那一種。根據被節流的操作的特點,以及與頁面的典型交互方式,我們可以直接給頁面創建一個計時器,而不是等事件開始時再創建。

$(document).ready(scrolled = false; $(window).scroll(function() { scrolled = true; }); setInterval((scrolled) { checkScrollPosition(); scrolled = false; } }, 250); checkScrollPosition(); });

與前面的節流代碼不同,這個輪詢式的方案會調用JavaScript的 setInterval() 函數,每250毫秒檢查一次 scrolled 變數的狀態。不管什么時候發生滾動事件, scrolled 都會被設置為 true ,以確保在下一次輪詢時調用 checkScrollPosition() 。

三十七、中止動畫的注意事項
由于 .stop() 方法默認情況下會在動畫的當前位置中止動畫,因而在使用簡寫動畫方法的情況下,就有可能導致意外的結果。在動畫之前,這些簡寫的動畫方法會確定最終的值,然后動態變化到該值。比如說,如果使用 .stop() 在 .slideDown() 動畫的中途將其中止,然后調用 .slideUp() 。那么下次再在同一個元素上調用 .slideDown() 時,就只會向下滑動到上一次停止時的高度。為了解決這個問題, .stop() 方法可以接收兩個布爾值參數( true/false ),其中第二個參數叫 goToEnd 。如果把這個參數設置為 true ,那么當前動畫不僅會停止,而且會立即跳到最終值。當然,這樣做的結果就是看起來有點突兀。所以更好的辦法是把最終值保存在一個變數中,使用 .animate() 顯式變化到該值,而不要依賴jQuery確定的值。

jQuery還有一個方法可以中斷動畫: .finish() 。這個方法與 .stop(true,true) 效果類似,因為它會清除排隊的動畫并使當前動畫跳到最終值。不過,與 .stop(true, true) 不同的是,它也會使所有排隊的動畫都跳到各自的最終值。

三十八、全局效果內容
jQuery的效果模塊中包含一個非常方便的 $.fx 對象,在需要徹底改變動畫的性質時,可以訪問這個對象。盡管這個對象的某些內容名不見經傳,只為jQuery庫本身使用而設計,但另外一些內容則可以供我們在全局層面上修改動畫運行的效果。

  • 禁用所有效果 我們會在默認情況下提供動畫,但在一些低配置設備,比如非智能手機上,就需要禁用這些動畫;否則,這些設備中的動畫就會顯得支離破碎。或者,當用戶認為動畫會分散其注意力時,也應該允許用戶關閉動畫。為了實現這個功能,只要簡單地把 $.fx.off 內容設置為 true 即可。
  • 定義效果時長
  • $.fx 對象還有一個 speeds 內容。這個內容本身是一個對象,包含三個內容,通過jQuery核心源代碼中這一小段可以看出來: speeds: { slow: 600, fast: 200, //默認速度 _default: 400 }

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • JAVA AJAX教程第二章-JAVASCRIPT基础知识(2)

      JAVA AJAX教程第二章-JAVASCRIPT基础知识(2)

      2018-03-29 11:00

    • JQuery学习(5-AJAX)

      JQuery学习(5-AJAX)

      2018-03-12 10:10

    • 【JQuery】Ajax

      【JQuery】Ajax

      2018-03-12 08:01

    • JAVA AJAX教程第一章—初识AJAX

      JAVA AJAX教程第一章—初识AJAX

      2018-03-11 11:00

    网友点评