By using the animate and scrollTop methods in jQuery, you can create a simple animation of scrolling to the top without a plugin:
// 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>
Changing the value of scrollTop can change where you want to place the scroll bar. All you really need to do is animate the body of the document for 800 milliseconds until it scrolls to the top of the document.
Note: Be careful about some incorrect behavior of scrollTop.
Preload images
If your webpage is going to use a lot of images that are initially invisible (e.g., on hover), then you can preload these images:
$.preloadImages = function () { for (var i = 0; i < arguments.length; i++) { $('<img alt="jQuery tips that front-end programmers should know" >').attr('src', arguments[i]); } }; $.preloadImages('img/hover-on.png', 'img/hover-off.png');
Check if the images are loading
Sometimes in order to continue the script, you may Need to check if all images are loaded:
$('img').load(function () { console.log('image load successful'); });
You can also check if a specific image is loaded by replacing the tag with an ID or class.
Automatically fix broken images
It is very painful to replace already broken image links one by one. However, the following simple code can help you:
$('img').on('error', function () { if(!$(this).hasClass('broken-image')) { $(this).prop('src', 'img/broken.png').addClass('broken-image'); } });
Even if there are no broken links, adding this code will not cost you anything.
Hover Toggle Class
Suppose you want a clickable element to change color when the user hovers over it. Then you can add the class to the element when the user hovers it, and remove it otherwise:
$('.btn').hover(function () { $(this).addClass('hover'); }, function () { $(this).removeClass('hover'); });
You just need to add the necessary CSS. An easier way is to use the toggleClass method:
$('.btn').hover(function () { $(this).toggleClass('hover'); });
Note: Maybe in this case, the CSS solution is faster, but it is necessary to understand this method.
Disable Input Fields
Sometimes you may want to disable a form's submit button or one of its text inputs until the user performs a specific action (for example, checking the "I have read the terms" checkbox). Add the disabled attribute to your input to enable it when you want:
$('input[type="submit"]').prop('disabled', true);
Then you just need to run the input prop method, but set the value of disabled to false:
$('input[type="submit"]').prop('disabled', false);
Stop loading the link
Sometimes you don't want to link to a specific web page, nor do you want to reload the page - you may want the link to do something else, such as trigger some other script. This requires making a fuss about blocking the default action:
$('a.no-link').click(function (e) { e.preventDefault(); });
Fade in/slide switching
Sliding and fading are both things we use a lot when we use jQuery to animate. If you just want to display an element after the user clicks it, then using the fadeIn and slideDown methods is perfect. However, if you want the element to appear on the first click and then disappear on the second click, then you can try the following code:
// 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