延迟我的jquery函数的正确方法

时间:2015-07-29 15:38:09

标签: jquery

我已经编制了一个促销活动"弹出"窗口出现在我的产品页面上,以及一个"掩码"出现在弹出窗口后面的页面内容变暗后出现在弹出窗口后面。

使用以下代码

显示这两个元素
    <div id="boxes">
        <div id="dialog" class="window">
            <div class="close"></div>
        </div>
        <div id="mask"></div>
    </div>
    <div class="page-content">
       <a class="show-box"></a>
    </div>

    <script> 
        $(document).ready(function() {  

        var id = '#dialog';

        //Get the screen height and width
        var maskHeight = $(document).height();
        var maskWidth = $(window).width();

        //Set heigth and width to mask to fill up the whole screen
        $('#mask').css({'width':maskWidth,'height':maskHeight});
        $('#mask').delay( 7000 );
        //transition effect
        $('#mask').fadeIn(500); 
        $('#mask').fadeTo("slow",0.5);  

        //Get the window height and width
        var winH = $(window).height();
        var winW = $(window).width();

        //Set the popup window to center
        $(id).css('top',  winH/2-$(id).height()/2);
        $(id).css('left', winW/2-$(id).width()/2);

        //transition effect
        $(id).delay( 7000 );  
        $(id).fadeIn(2000);     

        //if close button is clicked
        $('.window .close').click(function (e) {
        //Cancel the link behavior
        e.preventDefault();

        $('#mask').hide();
        $('.window').hide();
        });

        //if mask is clicked
        $('#mask').click(function () {
        $(this).hide();
        $('.window').hide();
        });
        //toggle view link 
        $('#show-box').click(function () {
        $('#mask').fadeIn(500); 
        $('#mask').fadeTo("slow",0.5);
        $('.window').fadeIn(500);   
        $('.window').show();
        });  

        });
      </script> 

最初,脚本立即在document.ready上加载了弹出窗口。我在显示弹出窗口之前添加了$('#mask').delay( 7000 );$(id).delay( 7000 );等待7秒。

这很有效,只有一个蠢货。在7秒的延迟时间内,页面的所有悬停功能都将丢失。面具本身确实有一个覆盖整个屏幕的固定位置,所以即使它在7秒钟内没有显示,也就像加载了面具元素一样。

如何正确延迟弹出窗口并屏蔽整整7秒,同时在此期间不破坏页面的悬停功能?

1 个答案:

答案 0 :(得分:1)

您只需使用setTimeout即可。创建一个在单击后处理所有内容的函数,这样您就可以有效地捆绑它并在settimeout中调用该函数。

function delayedFadeIn(){
    //place the code you wish to be delayed here
    ...
}

(...)

$(document).ready(function() {  

    var id = '#dialog';

    //Get the screen height and width
    var maskHeight = $(document).height();
    var maskWidth = $(window).width();

    setTimeout(delayedFadeIn, 7000);
    (...)
}