代码之家  ›  专栏  ›  技术社区  ›  kayteen

如何在jquery中按程序触发事件?

  •  1
  • kayteen  · 技术社区  · 15 年前

    我有一页纸,上面写满了圆角。在每个分区(包括所有内部分区,在这个分区内的跨度)上,我调用了许多与它们相关的事件。现在我面临的问题是加载时间。在“ready”函数中,我们是否有任何方法可以先加载圆角脚本,当我鼠标悬停在主DIV上时,动态加载其余事件?任何能缩短我装载时间的方法都会很有帮助!

    例子:

    $(function(){
        $('.inner').corner({
            tl: { radius: 6 },
            tr: { radius: 6 },
            bl: { radius: 6 },
            br: { radius: 6 }
        });
    
        // loadDivEvents() in this we call the rest of the events upon
        // mouseover or any other event without multiple calls
    
    });
    
    function loadDivEvents(){
        //this may have many events/ajax calls
    }
    
    2 回复  |  直到 15 年前
        1
  •  0
  •   Anthony    15 年前

    如果我可以问的话,装载时间的实际问题是什么?

    当第一次加载页面时,任何与事件相关的函数(通常)都只是绑定到页面中的元素,以便在事件发生时执行与事件相关的函数。所以我不知道这是否真的会影响你的页面加载时间。

    会影响页面加载时间的是,在页面加载时,您试图一次关联一个与事件相关的函数的数量和数量。

    例如,如果我有10个列表,每个列表有10个列表项,并且我希望其中任何一个列表项在悬停时变为绿色——如果我有单独定义这100个事件中的每一个的javascript,这可能会增加我的开销。

    但是!

    如果我在页面加载后将这些事件的绑定移动到,并且当我第一次将鼠标滑过主DIV(或窗口,或在接下来几乎总是发生的任何事件上)时,就会发生这种情况,那么开销就会传递给该事件。页面已加载,但现在在处理事件时被冻结。我的用户真的很生气,因为他不能向下滚动,如果问题够严重,他不能关闭页面或切换到另一个窗口。他在页面需要永远加载时就预料到了这一点,现在,当他访问您的页面时,总是会发生这种随机冻结。

    因此,如果存在页面加载问题,更好的解决方案可能是找出是否有冗余或不必要的函数在运行。在上面我给出的例子中,我可以简单地说,“当任何列表项被鼠标移到上方时,它们会变成紫色”,这是一个绑定,而不是100。或者我可能犯了一个简单的错误,那就是让这100个绑定中的每一个实际上都做了一些事情(比如检查列表项的值),它只需要在触发它的事件之后做,而不是在页面加载期间。这将是100个暂停,我甚至不打算在页面加载期间发生一次。

        2
  •  0
  •   kayteen    15 年前

    我用图像而不是沙发来修复这个问题。我发现这是解决这个问题的最好方法。