关于hover和setInterval的问题

发布于 2024-11-30 16:58:56 字数 1320 浏览 1 评论 0原文

我使用悬停功能,并且在鼠标悬停时 setInterval 函数开始工作 和onmouseout我清除setInterval函数

我的代码如下:

----更新---- 对于幻灯片,我有一个 div 名称 divForImages 和我 .append() 该特定 div 中的新图像。我使用 .append() 函数。 我的算法非常简单: 使用 Fadein 函数淡出前一个图像并 .append() 新图像。 所以新的更新版本是:

var IntervalID;    

$("li").hover(
            function() {                                                        
                    IntervalID = setInterval(function() {
                                    //a slideshow begins to auto play...

                        $(".divForImages img").fadeOut(1000); //previous image

                        var item = $('<img src="'+attribute_of_href+'"   width="200" height="100" style="left:0px;top:0px;position:absolute"  />').css({"display":"none"}); //new image that is going to be faded in
                       $(".divForImages").append(item);/* new */

                       item.fadeIn(1000);
                                    }, 4000);
                       },
            function() {                
                    clearInterval(IntervalID);
                        });

我定义的毫秒是4000。 问题是,当我首先将鼠标悬停在 li 上时,幻灯片不会开始 立即自动播放,但等待 4 秒!

当然,我已经定义了 4000 秒的时间,

我可以让 setInterval 在鼠标悬停时立即启动而不是等待 4000 毫秒吗?

提前致谢

I use the hover function and on mouseover a setInterval function begins working
and onmouseout i clear the setInterval function

My code is as follows:

----UPDATED----
For the slideShow i have a div name divForImages and i .append() the new image in that specific div. I use the .append() function.
My algorithm is really simple:
FadeOut the previous image and .append() the new image by using the Fadein function.
So the new updated version is:

var IntervalID;    

$("li").hover(
            function() {                                                        
                    IntervalID = setInterval(function() {
                                    //a slideshow begins to auto play...

                        $(".divForImages img").fadeOut(1000); //previous image

                        var item = $('<img src="'+attribute_of_href+'"   width="200" height="100" style="left:0px;top:0px;position:absolute"  />').css({"display":"none"}); //new image that is going to be faded in
                       $(".divForImages").append(item);/* new */

                       item.fadeIn(1000);
                                    }, 4000);
                       },
            function() {                
                    clearInterval(IntervalID);
                        });

The milliseconds i have defined are 4000.
The problem is that when i FIRST mousover the li, the slideshow doesn't begin
to autoplay immediately but it waits for 4 seconds!

Of course, i have defined the time for 4000 seconds

Can i make the setInterval to start immediately when i mouseover and not wait for 4000 ms??

thanks, in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夏日浅笑〃 2024-12-07 16:58:56

试试这个:

function playSlideShow() {
    //a slideshow begins to auto play...
}

$("li").hover(
    function() {    
            playSlideShow();    // start playing immediately        
            IntervalID = setInterval(playSlideShow, 4000);
    },
    function() {                
            clearInterval(IntervalID);
    });

Try this:

function playSlideShow() {
    //a slideshow begins to auto play...
}

$("li").hover(
    function() {    
            playSlideShow();    // start playing immediately        
            IntervalID = setInterval(playSlideShow, 4000);
    },
    function() {                
            clearInterval(IntervalID);
    });
红ご颜醉 2024-12-07 16:58:56

您需要使用 settimeout 而不是 setinterval

了解更多信息,请检查 setinterval 与 settimeout

You need to use settimeout instead of setinterval

to learn more check setinterval vs settimeout

伴随着你 2024-12-07 16:58:56

当然,只需命名该函数,立即调用它,然后让它按名称将其自身返回给 setInterval()

var IntervalID;
var slideshow = function () {
        //a slideshow begins to auto play...
    return slideshow; // <-- the return value lets you invoke and pass it.
};

$("li").hover( function () {
    IntervalID = setInterval( slideshow(), 4000);
}, function () {
    clearInterval(IntervalID);
});

示例: http://jsfiddle.net/Hgwt8/

Sure, just name the function, invoked it immediately, and have it return itself by name to the setInterval().

var IntervalID;
var slideshow = function () {
        //a slideshow begins to auto play...
    return slideshow; // <-- the return value lets you invoke and pass it.
};

$("li").hover( function () {
    IntervalID = setInterval( slideshow(), 4000);
}, function () {
    clearInterval(IntervalID);
});

Example: http://jsfiddle.net/Hgwt8/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文