首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$(window).resize()运行缓慢

$(window).resize()运行缓慢
EN

Stack Overflow用户
提问于 2010-07-13 00:43:41
回答 5查看 1.6K关注 0票数 2

我有一张带有缩略图的照片幻灯片。下一步/上一步按钮的显示和消失取决于窗口的大小;如果缩略图超出窗口大小,则会显示按钮。如果没有,它们就会消失。我的问题是,有时,他们不会出现,或者他们不会出现几秒钟。在其他时候,它们不会消失。有时它工作得很好。

对于jQuery和JavaScript,我还是个新手。有什么建议吗?

代码语言:javascript
复制
    // hide previous and next buttons
$('#prev, #next').hide();

// get width of thumbnail list
var thumbsWidth = $('div#thumbs ul').width();

// show/hide next/prev buttons
function buttonVisibility() {
    if (thumbsWidth + 225 > screenWidth) {
        $('#prev, #next')
        .fadeTo('fast', 0.5)
        .hover(function(){
            $(this).fadeTo('fast', 1);
        }, function(){
            $(this).fadeTo('fast', 0.5);
        });
    } else {
        $('#prev, #next').fadeTo('fast', 0, function(){
            $(this).hide();
        });
    }
}

// declare global screenWidth variable
var screenWidth

// find width of thumbnail window and show/hide next/prev buttons accordingly
function findWidth(){
    screenWidth = $('div#thumbs').width();
    buttonVisibility();
}

// perform findWidth() on load and on window resize
findWidth();
$(window).resize(function(){
    findWidth();
});
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-13 00:59:28

这可能是浏览器在调整窗口大小(即根据窗口大小的变化重新设计布局)时固有的工作,再加上您正在进行的DOM更改,只是使事情停滞不前。您可以尝试在触发代码之前等待用户交互完成。

代码语言:javascript
复制
$(window).resize((function() {
  var timeout = null;
  return function() {
    if (timeout) clearTimeout(timeout);
    timeout = setTimeout(findWidth, 250);
  };
})());

这将改变事情,使您的代码不会尝试做任何事情,直到用户暂停或停止拖动窗口后的1/4秒。

票数 5
EN

Stack Overflow用户

发布于 2010-07-13 00:54:13

加载时计算一次screenWidth,因此您不必反复搜索div#thumbs

票数 0
EN

Stack Overflow用户

发布于 2010-07-13 00:59:05

创建一个变量displayed,该变量存储按钮是否可见的当前状态。现在,在resize事件中,仅当它们被隐藏时才执行fadeIn

您还可以存储所选元素,以避免每次都进行选择。

代码语言:javascript
复制
// hide previous and next buttons
$prevNext = $('#prev, #next');
$prevNext.hide();

// get width of thumbnail list
var $thumbs = $('#thumbs');
var thumbsWidth = $('#thumbs ul').width();
var screenWidth;
var displayed = false;

// show/hide next/prev buttons
function buttonVisibility() {
    if (thumbsWidth + 225 > screenWidth) {
        if (!displayed) {
            displayed = true;
            $prevNext.fadeTo('fast', 0.5).hover(function () {
                $(this).fadeTo('fast', 1);
            }, function () {
                $(this).fadeTo('fast', 0.5);
            });
        }
    } else if (displayed) {
        displayed = false;
        $prevNext.fadeTo('fast', 0, function () {
            $(this).hide();
        });
    }
}

// find width of thumbnail window and show/hide next/prev buttons accordingly
function findWidth() {
    screenWidth = $thumbs.width();
    buttonVisibility();
}

// perform findWidth() on load and on window resize
findWidth();
$(window).resize(findWidth);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3230359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档