0

上下文:在我的产品网站上,我有一个 Java webstart 应用程序的链接(在多个位置)。

我的目标:防止用户双击,即仅在第一次单击时“触发”,等待 3 秒后再次启用链接。单击时,将链接图像更改为表示应用程序正在启动的内容。

我的解决方案有效,但单击后图像无法可靠更新。注释掉的调试输出为我提供了正确的内容,并且鼠标悬停回调也可以正常工作。

在此处查看它的运行情况:http : //www.auctober.de/beta/(单击“jetzt starten”按钮)。

顺便说一句:如果有人有比虚拟动画更好的延迟调用函数的方法,请告诉我。

JavaScript:

<script type="text/javascript">
      <!--
        allowClick = true;
        linkElements = "a[href='http://www.auctober.de/beta/?startjnlp=true&rand=1249026819']";
        $(document).ready(function() {
            $('#jnlpLink').mouseover(function() {
                if ( allowClick ) {
                    setImage('images/jetzt_starten2.gif');
                }
            });
            $('#jnlpLink').mouseout(function() {
                if ( allowClick ) {
                    setImage('images/jetzt_starten.gif');
                }
            });

           $(linkElements).click(function(evt) {
                if ( ! allowClick ) {
                    evt.preventDefault();
                }
                else {
                    setAllowClick(false);
                    var altContent = $('#jnlpLink').attr('altContent');
                    var oldContent = $('#launchImg').attr('src');
                    setImage(altContent);
                    $(this).animate({opacity: 1.0}, 3000, "", function() {
                        setAllowClick(true);
                        setImage(oldContent);
                    });
                }
            });

        });

        function setAllowClick(flag) {
            allowClick = flag;
        }
        function setImage(imgSrc) {
            //$('#debug').html("img:"+imgSrc);
            $('#launchImg').attr('src', imgSrc);
        }
      //-->
</script>
4

4 回答 4

1

可以使用 setTimeout 函数实现延迟

setTimeout(function() { alert('something')}, 3000);//3 secs

对于您的 src 问题,请尝试:

$('#launchImg')[0].src = imgSrc;
于 2009-07-31T08:13:48.160 回答
0

...或者只是使用:

$(this).animate({opacity: '1'}, 1000);

在代码中的任何位置,其中 $(this) 已经处于 opacity=1 ......这意味着一切似乎都暂停了一秒钟。我经常用这个。

于 2010-01-11T21:15:06.107 回答
0

查看BlockUI插件。听起来它可能是您正在寻找的东西。

你会在这里找到一个很好的演示。

于 2009-07-31T08:12:44.263 回答
-2

在脚本顶部添加此变量:

var timer;

实现这个功能:

function setFlagAndImage(flag) {
    setAllowClick(flag);
    setImage();
}

然后将虚拟动画替换为:

timer = window.setTimeout(function() { setFlagAndImage(true); }, 3000);

如果发生其他事情并且您想停止计时器,您可以调用:

window.clearTimeout(timer);
于 2009-07-31T08:22:31.687 回答