0

私はこのコードを持っていますが、一度しか実行されません...

$('.' + container).hover(function() {   
        t = setTimeout( function(elem){
            //this should be executed as long as I hover, 
            //with interval declared in viewSpped variable
            $(elem).find('img').first().appendTo('.' + container).fadeOut(500);
            $(elem).find('img').first().fadeIn(800);    

        }(this), viewSpeed);


    }...

私が間違っていることは何か分かりますか?ありがとう!

4

3 に答える 3

3

setTimeout引数なしでコールバックを呼び出します。したがってelem、コールバックには渡されません。自己呼び出し関数を実行しようとしていた場合、コールバックを に渡すのではなく、関数をすぐに呼び出すだけですsetTimeout()

あなたが何を期待しているのかはわかりませんがelem、ホバリングされたアイテムにしたい場合は、次のようにします。

$('.' + container).hover(function() {   
    var self = $(this);
    t = setTimeout( function(){
        //this should be executed as long as I hover, 
        //with interval declared in viewSpped variable
        self.find('img').first().appendTo('.' + container).fadeOut(500);
        self.find('img').first().fadeIn(800);    

    }, viewSpeed);
}...
于 2012-09-29T15:23:42.683 に答える
1

setTimeoutはコールバックを 1 回だけ呼び出します。これは正常です。

関数を定期的に実行したい場合は、setIntervalが必要になるかもしれません。

ちなみに、あなたのコードには別のエラーがあります:

t = setInterval( function(elem){
        //this should be executed as long as I hover, 
        //with interval declared in viewSpped variable
        $(elem).find('img').first().appendTo('.' + container).fadeOut(500);
        $(elem).find('img').first().fadeIn(800);    
    }, viewSpeed, this);

setIntervalコールバックによって渡される、またはコールバックに渡される引数はsetTimeout、期間の後です。

または、より互換性を持たせるために (私が提供するリンクには IE の回避策も記載されていることに注意してください):

var $elem = $(this);
t = setInterval( function(){
         $elem.find('img').first().appendTo('.' + container).fadeOut(500);
         $elem.find('img').first().fadeIn(800);    
}, viewSpeed);
于 2012-09-29T15:22:44.667 に答える
1

関数をコールバックとして使用するのではなく、すぐに呼び出しています (パラメーターを渡す必要があるため、とにかく機能しません) setInterval

var elem = $(this);
var container = $('.' + container);

t = setInterval(function() {
        elem.find('img').first().appendTo(container).fadeOut(500);
        elem.find('img').first().fadeIn(800);
    }, viewSpeed);
于 2012-09-29T15:24:06.460 に答える