透過使用jQuery中的animate 和scrollTop 方法,不用插件就可以創建一個滾動到頂部的簡單動畫:
// Back to top $('.top').click(function (e) { e.preventDefault(); $('html, body').animate({scrollTop: 0}, 800); });
<!-- Create an anchor tag --> <a class="top" href="#">Back to top</a>
改變scrollTop 的值可以更改你想要放置滾動條的位置。所有你真正需要做的是在800毫秒的時間內設定文件主體的動畫,直到它滾動到文件的頂部。
註:小心scrollTop的一些錯誤行為。
預先載入圖片
如果你的網頁要使用大量開始不可見的(例如,懸停的)圖像,那麼可以預先載入這些圖片:
$.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('<img alt="前端程式設計師應該知道的jQuery 小技巧" >').attr('src', arguments[i]); } }; $.preloadImages('img/hover-on.png', 'img/hover-off.png');
檢查圖片是否載入
有時為了繼續腳本,你可能要檢查圖片是否全部載入完畢:
$('img').load(function () { console.log('image load successful'); });
你也可以用ID或類別取代標籤來檢查某個特定的圖片是否已載入。
自動修復破壞的圖像
逐個替換已經破壞的圖像連結是非常痛苦的。不過,下面這段簡單的程式碼可以幫助你:
$('img').on('error', function () { if(!$(this).hasClass('broken-image')) { $(this).prop('src', 'img/broken.png').addClass('broken-image'); } });
即使沒有任何斷掉的鏈接,加上這段程式碼也不會讓你有任何損失。
懸停切換類別
假設你希望當使用者將滑鼠懸停在可點擊的元素上時,它會改變顏色。那你可以在使用者懸停的時候加入類別到元素中,反之則刪除類別:
$('.btn').hover(function () { $(this).addClass('hover'); }, function () { $(this).removeClass('hover'); });
你只需要加入必要的CSS即可。更簡單的方法是使用toggleClass 方法:
$('.btn').hover(function () { $(this).toggleClass('hover'); });
註:可能在這種情況下,CSS這種解決方案更快,不過了解這個方法很有必要。
禁用輸入欄位
有時候,你可能想要停用表格的提交按鈕或它的某一項文字輸入直到使用者執行了特定動作(例如,勾選「我已閱讀相關條款」複選框)。添加 disabled屬性到你的輸入就可以在你想要的時候才啟用它:
$('input[type="submit"]').prop('disabled', true);
然後你只需要運行輸入的prop 方法就可以了,不過disabled 的值要設置為false:
$('input[type="submit"]').prop('disabled', false);
停止加載鏈接
有時候,你既不需要連結到某個特定的網頁,也不想要重新載入頁面——你可能希望連結做點別的事情,例如說觸發一些其他腳本。這就要在阻止預設動作上做文章了:
$('a.no-link').click(function (e) { e.preventDefault(); });
淡入/滑動切換
滑動和淡入都是我們用jQuery做動畫的時候大量運用的東西。如果你只是想在使用者點擊之後展示一個元素的話,那麼用fadeIn 和slideDown 方法就很完美。但是,如果你想要元素在第一次點擊的時候出現,然後在第二次點擊的時候消失的話,那麼可以試試看下面的程式碼:
// Fade $('.btn').click(function () { $('.element').fadeToggle('slow'); }); // Toggle $('.btn').click(function () { $('.element').slideToggle('slow'); });
简单的手风琴
这是一个可快速生成手风琴的简单方法:
// Close all panels $('#accordion').find('.content').hide(); // Accordion $('#accordion').find('.accordion-header').click(function () { var next = $(this).next(); next.slideToggle('fast'); $('.content').not(next).slideUp('fast'); return false; });
通过添加这个脚本,你真正需要做的仅仅是在页面上添加必要的HTML元素,这样它就可以运行工作了。
让两个div高度相同
有时候,你需要让两个div无论包含什么内容都拥有相同的高度:
$('.div').css('min-height', $('.main-div').height());
设置 min-height,这意味着它可以比主div大但绝对不能比主div小。不过,还有一种更灵活的方法是遍历一组元素,然后将高度设置为最高的那个元素的高度:
var $columns = $('.column'); var height = 0; $columns.each(function () { if ($(this).height() > height) { height = $(this).height(); } }); $columns.height(height);
如果你希望所有列的高度相同:
var $rows = $('.same-height-columns'); $rows.each(function () { $(this).find('.column').height($(this).height()); });
在新标签页/窗口打开外部链接
在一个新的浏览器tab或窗口中打开外部链接,并确保同一个来源的链接能在同一个tab或者窗口中打开:
$('a[href^="http"]').attr('target', '_blank'); $('a[href^="//"]').attr('target', '_blank'); $('a[href^="' + window.location.origin + '"]').attr('target', '_self');
注意:window.location.origin 在IE10中无效。修复的时候要小心这个问题。
在改变Visibility时触发
当用户不再关注某个tab,或重新聚焦原来的那个tab上时,触发JavaScript:
$(document).on('visibilitychange', function (e) { if (e.target.visibilityState === "visible") { console.log('Tab is now in view!'); } else if (e.target.visibilityState === "hidden") { console.log('Tab is now hidden!'); } });
AJAX调用错误处理
当Ajax调用返回404或500错误时,就执行错误处理程序。如果没有定义处理程序,其他的jQuery代码或会就此罢工。定义一个全局的Ajax错误处理程序:
$(document).ajaxError(function (e, xhr, settings, error) { console.log(error); });
链式插件调用
jQuery允许“链式”插件的方法调用,以减轻反复查询DOM并创建多个jQuery对象的过程。比方说,下面的代码片段代表了你的插件方法调用:
$('#elem').show(); $('#elem').html('bla'); $('#elem').otherStuff();
通过使用链式,可以大大改善:
$('#elem') .show() .html('bla') .otherStuff();
还有一种方法是在(前缀$)变量中高速缓存元素:
var $elem = $('#elem'); $elem.hide(); $elem.html('bla'); $elem.otherStuff();
链式和高速缓存的方法都是jQuery中可以让代码变得更短和更快的代最佳做法。
英文原文:jQuery Tips Everyone Should Know