2009-12-30 5 views
0

jquery innerfade plugin을 사용하여 회전중인 일부 이미지 옆에 작은 형태의 전환 설정이 있습니다. 내가 원하는 것은 사용자가 새로운 전환 설정 (예 : 시간 초과)을 선택하면 내부 변경 사항이 동적으로 시간 초과 설정을 업데이트하므로 사용자가이 변경 내용을 미리 볼 수 있습니다. 그러나 나는 이것을 할 수있는 최선의 방법이 확실하지 않습니까? 스크립트를 변경하지 않고도 가능합니까?동적으로 jquery innerfade를 변경합니다.

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

현재 접근 방식이 작동하지 않습니다. 또한 #foo에서 innerfade의 바인딩을 해제하려고했지만 그 중 하나가 작동하지 않고 스크립트에 remove 함수가 없습니다.

어떻게하면됩니까?

답변

0

더 많은 함수를 사용하여 놀고 난 후에 나는 콜백 함수로 작업을 시도했다. 그것은 작동했고 원하는대로 설정을 업데이트 할 수 있었다. 유일한 단점은 현재의 페이드/타임 아웃이 끝나기를 기다려야 만 새로운 설정이 나타납니다. 이것은 미리보기에서 새 업데이트를보기 전에 사용자가 만료 될 때까지 기다려야하는 긴 제한 시간 (예 : 20 초)이있는 경우 b/c를 원했습니다. 내가 직면 한 문제는 설정 시간 제한을 지울 수있는 방법이 없었기 때문입니다. b/c timeoutID는 원래 플러그인에 설정되지 않았습니다. 나는 지금

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

: 다음 기능에

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

: 그래서 내가 그들을 액세스 할 수 이러한 설정 한 다음 innerfade 함수의 innerfade 기능

을 기억하기 위해 원래 스크립트를 수정 이벤트가 변경되면 이벤트를 내 양식 요소에 바인딩하고, 시간 초과를 지우고, 함수를 내 컨테이너에 재 할당 할 수 있습니다.

$('#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() 미리보기를 포장하고 다시 채우는 것이 효과가 있습니까? 최후의 수단으로 페이지 또는 미리보기를 래핑하는 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') 
}); 

당신은에 다시 테스트를 플러그인이 업데이트 될 때이 모든 시간을 가질 것입니다.

관련 문제