javascript – jQuery resize(),scroll():使用变量的好习惯?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – jQuery resize(),scroll():使用变量的好习惯?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3353字,纯文字阅读大概需要5分钟。
内容图文
![javascript – jQuery resize(),scroll():使用变量的好习惯?](/upload/InfoBanner/zyjiaocheng/725/2704340b36fb4a1b83738aa56efe3d80.jpg)
所以我的网站在滚动时遇到了延迟.我只是想问一下,在$(window).scroll(function(){}中初始化所需的jQuery对象是否是一个好习惯?
例如:
$(window).scroll(function () {
$thisContainer = $('.section #container');
// 10 more initializations...
$thisContainer.css(); // something like that...
}
我觉得这不是一个好主意,因为每次用户滚动时都会经常调用此函数.当它被调用时,这些变量将被重新初始化.结果会浪费大量的记忆和时间.
谢谢!
解决方法:
通常,您应该避免在scroll事件触发的回调中执行任何操作,因为将对窗口滚动的每个像素执行回调.但是,根据您正在构建的应用程序,在回调中有些事情根本无法避免.
在滚动回调中进行大量“昂贵”的操作或查询可能会完全冻结浏览器并使您的应用程序无法使用,因此您必须非常小心并且性能谨慎.
以下是一些良好做法的例子.
一般例子:
实例:http://jsfiddle.net/tfjyf0a3/
// Since we can get away with querying the elements outside of the callback
// our application will be a lot snappier because we're doing less work for
// every scrolled pixel. Always query DOM elements outside if possible.
var $output = $('#output');
var $window = $(window);
// This function is executed for every scrolled pixel, so we need to
// avoid doing "expensive" queries or changing the DOM in here too.
function changeFontSize(scrollNumber) {
// Setting the fontSize here is unavoidable because our application needs it.
$output.css('fontSize', scrollNumber <= 50 ? 18 : Math.floor(scrollNumber/10));
}
$window.on('scroll', function() {
// Since `$(this)` here would be the window object, it's better to
// just use the previous reference named `$window`.
// Querying the scrolled position here is unavoidable because our
// application needs it.
var currentScroll = $window.scrollTop();
// Saving a reference of the `scrollTop()` value is better when
// we need to re-use its value.
$output.html(currentScroll + 'px');
// We have to be cautious inside this function as well.
changeFontSize(currentScroll);
});
// This is a good practice when you need to guarantee the execution of the function
// when there isn't enough content in the body to cause a scrollbar in the Browser.
//
// The 'scroll' event will fire only when there is a scrollbar in the Browser.
$window.scroll();
有时您需要在scroll的回调函数中执行“昂贵的”DOM操作,查询或甚至Ajax请求.例如,想象一下构建一个实现称为无限加载模式的应用程序.在此应用程序中,当用户通过快速或慢速滚动到达页面底部时,您需要执行以下操作:
>检查用户是否已滚动到底部.
>检查是否有更多资源要加载.
>加载资源.
>将新资源附加到DOM.
您肯定不希望在每个滚动像素上执行上述所有步骤.这种情况的一个很好的做法是推迟上述步骤.示例可能如下所示:
延迟执行:
实例:http://jsfiddle.net/35qb1b88/
var $output = $('#output');
var $window = $(window);
var timer;
function changeFontSize(scrollNumber) {
$output.css('fontSize', scrollNumber <= 50 ? 18 : Math.floor(scrollNumber/10));
// ...
// load resources
// append in DOM
// ...etc
}
function scrollHandler() {
var currentScroll = $window.scrollTop();
$output.html(currentScroll + 'px');
changeFontSize(currentScroll);
}
// This callback will be executed for every pixel but it will
// do nothing if we're scrolling too fast because we're clearing
// the timeout. Only when scrolling has stopped and at least 100
// milliseconds have passed will the `scrollHandler` function run.
$window.on('scroll', function() {
timer && window.clearTimeout(timer);
timer = window.setTimeout(scrollHandler, 100);
});
$window.scroll();
同样的原则也适用于resize事件.
内容总结
以上是互联网集市为您收集整理的javascript – jQuery resize(),scroll():使用变量的好习惯?全部内容,希望文章能够帮你解决javascript – jQuery resize(),scroll():使用变量的好习惯?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。