2012-02-22 4 views
3

질문 :jQuery를주기 - 변경 옵션을 동적으로

가 어떻게 HTML 요소에 마우스 상호 작용을 통해 비동기 적으로 jQuery를주기의 옵션을 변경할 것인가?


jsFiddle

Here's a working example. 의도에 대한 설명에 대한 설명을 참조하십시오


전도 연구 : 사이클의 저자

This tweet은 사이클의를 수정할 수 있다고 밝혀옵션을 비동기 적으로 사용합니다.

내가 주제에 대해 설명 할 수 있다면 그는 후속 트윗에서 물었고 그는 "계속 숨어있다"고 말했다.

주기의 소스 코드를 검토 한 결과, 그는 거짓말하지 않은 것으로 나타났습니다. 실제로는 cycle.opts이 존재하며, 분명히 언급할만한 기능이있는 debug 기능이 있습니다. 그러나 이러한 기능을 사용하는 것에 대해서는 거의 생각하지 못했습니다.

나는 cycle.opts을 사용하여 객체의 상태를 반환 할 수 있지만, "... 그리고 나서 필요한 것을 변경합니다."라는 측면에서 알 수없는 부분입니다. Options Reference page을 검토 한 결과 다른 옵션의 기본값이 방해받지 않는 것처럼 보입니다.

+0

매우 유용한 것으로 나타났습니다. JS 피들은 @bububaba의 대답을 반영하지 않습니까? 받아 들여서는 안되나요? –

답변

1

를 초기 설정 후 동적으로 변경할 수 없습니다 :이보십시오. 해결 방법 코드는 아래에 게시됩니다.

질문에 jsFiddle 예제를 기반으로 작동시키지 못했습니다.

필자의 경우, 슬라이드 쇼를 평소와 같이 순환시키고 싶지만 사용자가 처음 이미지를 클릭하면 마우스 오버 동작에 일시 중지가 활성화됩니다.

일부 디버깅 후 동적으로 변경하려는 특정 옵션, 즉 '일시 중지'및 'pauseOnPagerHover'가 처음 슬라이드 쇼를 설정 한 후에 적용되지 않습니다. 여기

// After toggling image manually the first time by clicking it, enable pause on hover. 
$('.slideshow-image-link').click(function (e) { 
    e.preventDefault(); 
    // When clicked the first time, set up a hover event pausing the slideshow. 
    // It seems like changing the 'pause' option can't be done dynamically after 
    // setting up the slideshow cycle. 
    $('#slideshow-images').cycle('pause'); 
    $('.slideshow-image-link').hover(
     function() { // On mouse in. 
      $('#slideshow-images').cycle('pause'); 
     }, 
     function() { // On mouse out. 
      $('#slideshow-images').cycle('resume'); 
     } 
    ); 
}); 

위의 코드를 보여주는 jsFiddle있어이의 실제 원인을 찾을 필요없이

, 나는 아래, 내 문제에 함께 작업 솔루션을 해킹.

+0

미안 개체 cycle.opts' 참조가'때문에'불필요 너무 오래 걸린다. 나는 우리가 여전히 원하는 기능을 얻을 수있는 반면, A [jsFiddle] (http://jsfiddle.net/BuA7r/62/)에 코드를 시도하기로 결정, 그것은 확실히 원하는 동작을 생산하고 있습니다. 나는 이것을 지금 대답으로 받아 들일 것이다. – gmeben

3

글쎄, 내가 뭔가를 놓치지 않는 한, 코드에서 옵션을 전혀 바꾸지 않을 것이다. 일시 정지 -에 - 호버 동작을, 당신의 방법으로

$('#foo').mouseover(function(){ 
    var changedOpts = $('.shuffle').data('cycle.opts') 
    changedOpts.speed = 0; 
    $('.shuffle').data('cycle.opts', changedOpts); 
}); 
+0

나는 이것이 올바른 길로 가고 있다고 느낍니다. '.data'에 더 많은 논쟁을하기 전에는 저에게 분명히 보여야했습니다. 전환이 발생하기 전에 구성해야 할 필요가있는 옵션이 몇 가지 더 있습니다. 고맙습니다! – gmeben

+0

옵션 참조 페이지를 검토 한 결과, 다른 옵션의 기본값이 영향을 미치지 않아야한다는 것을 알았습니다. 사과드립니다. 나는 또한 #foo에 지정된'호출기 '를 가지고 있다고 언급하지 않았다. (새로운 jsFiddle 예제를 보라). 이것이 문제의 원인이 될 수 있습니까? – gmeben

+0

함수의 셋째 줄 :. '$은 ('. 셔플 ') 데이터 ('cycle.opts 'changedOpts는) changedOpts'가'대 – Andy