2009-12-30 57 views
0

我在使用jquery innerfade plugin旋轉的某些圖像旁邊有一小形式的過渡設置。我想要的是當用戶選擇新的轉換設置(即超時)時,內部淡入會動態更新超時設置,以便用戶可以預覽此更改的外觀。但我不確定最好的方式來做到這一點?有沒有可能改變腳本?動態更改jquery innerfade

$('#foo').innerfade({ 
    timeout: $('#bar').val() 
}); 

我目前的方法不起作用。我也嘗試了從#foo中解除內聯,但是這也不起作用,並且腳本沒有刪除功能。

我該如何做這項工作?

回答

0

玩過w /函數後,我試着用一個回調函數工作 - 這確實有效,並允許我根據需要更新任何設置。唯一的垮臺是我不得不等待當前的淡入淡出/超時完成,纔會出現新的設置。如果長時間超時(即20秒),用戶不得不等待它到期,然後才能在預覽中看到新的更新,這不是我想要的b/c。我面臨的問題是,我無法清除正在設置的超時,B/c它們的timeoutID從未在原始插件中設置。所以我修改了原來的腳本來設置這些,所以我可以訪問它們再回想在innerfade功能innerfade功能

$.innerfade.startTimeout = setTimeout(function() { 
    $.innerfade.next(elements, settings); 
}, settings.timeout); 
在接下來的功能

$.innerfade.continueTimeout = setTimeout((function() { 
    $.innerfade.next(elements, settings); 
}), settings.timeout); 

現在我可以將事件綁定到我的表單元素,當他們改變時,清除這些超時,並重新分配函數到我包含的div。

$('#timeout').change(update); 

function update() 
{ 
    if (typeof($.innerfade.startTimeout) != 'undefined') { 
    clearTimeout($.innerfade.startTimeout); 
    } 

    if (typeof($.innerfade.continueTimeout) != 'undefined') { 
    clearTimeout($.innerfade.continueTimeout); 
    } 

    $('#container').innerfade({[opts]}); 
} 
0

我不知道innerfade但它會工作到.empty()一個div包裝預覽並重新填充它?作爲最後的手段,您可以重新加載包裝預覽的頁面或iframe。沒有任何想法是可愛的,但他們不涉及改變插件。

1

您可以在不修改插件的情況下替換實際設置計時器的$.innerfade.next

例如:(未經測試)

$.innerfade.next = function(elements, settings) { 
    if (!$.data(settings.container, 'paused')) { 
     $.innerfade.animate(elements, settings); 
    } 

    if (settings.timeoutElem) 
     settings.timeout = settings.timeoutElem.val(); 

    setTimeout((function() { 
     $.innerfade.next(elements, settings); 
    }), settings.timeout); 
}; 


$('#foo').innerfade({ 
    timeout: $('#bar').val() 
    timeoutElem: $('#bar') 
}); 

你會這個插件被更新,每次都重新測試。