2013-08-27 1 views
0

이것은 "Views Popup"이라는 Drupal 6.x 모듈의 일부 자바 스크립트입니다. https://drupal.org/project/views_popup이 코드에 마우스 아웃시 지연을 추가해야합니다.

팝업을 트리거하는 링크에서 마우스가 움직일 때 팝업에 지연이 설정되지 않은 것 같습니다. 제목, 티저 텍스트 및 팝업에서 더 많은 링크가 있고 사용자는 링크 (이미지)에서 마우스를 움직여 "더 읽기"링크를 클릭 할 수 있어야합니다. 나는 아래의 코드에서 모든 설정을 조정하려고 시도했지만 아무도 이것과 관련이없는 것처럼 보인다. 나는 코더가 아니지만이 작업을하기 위해 뭔가를 추가해야한다고 생각합니다. 어떤 제안이라도 대단히 감사하겠습니다. 위의 코드를 가정하면 방법을 작동 그래서

var popup_time = 0; 
var popup_elem = 0; 
var popup_show_timer = 0; 
var popup_reset_timer = 0; 

$(function() { 
    popup_reset(); 

    $(".views-popup").appendTo("body"); 
}); 

Drupal.behaviors.viewsPopup = function(context) { 
    $(".views-popup-row").mouseover(function() { 
     popup_show(this); 
    }) 
    .mouseout(function() { 
     popup_hide(this); 
    }) 
    .mousemove(function(e) { 
     popup_move(this,e); 
    }); 
} 

function popup_move(me,evt){ 
    var e, top, left; 

    if (Drupal.settings.views_popup.follow_mouse){ 
    left = evt.pageX + 15; 
    top = evt.pageY; 

    $("#views-popup-" + $(me).attr("id")).css({ 
     left: left + 'px', 
     top: top + 'px' 
    }); 
    } 
} 


function popup_show(me) { 
    var p, e, top, left, pos ; 

    var x = $(me).attr("id"); 

    e = $("#views-popup-" + $(me).attr("id")); 
    if (e == popup_elem) { 
    return ; // already handled 
    } 

    if (! Drupal.settings.views_popup.follow_mouse){ 
    pos = $(me).offset(); 
    left = 20 + pos.left - $(document).scrollLeft(); 
    top = 2 + pos.top + $(me).outerHeight() - $(document).scrollTop(); 
    $(e).css({ 
     left: left + 'px', 
     top: top + 'px' 
    }); 
    } 

    popup_clear_show_timer(); 

    if (popup_elem) { 
    popup_elem.hide(); 
    popup_time = 500 ; 
    } 
    popup_elem = e; 
    if (popup_time == 0) { 
    popup_show_now(); 
    } else { 
    popup_show_timer = setTimeout("popup_show_now();",popup_time); 
    } 
} 


function popup_show_now() { 
    popup_show_timer = 0 ; 

    if(popup_elem) { 
    popup_elem.show(); 
    clearTimeout(popup_reset_timer); 
    popup_time = 0; 
    } 
} 

function popup_clear_show_timer(){ 
    if (popup_show_timer) { 
    clearTimeout(popup_show_timer); 
    popup_show_timer = 0; 
    } 
} 

function popup_hide(me) { 
    e = $("#views-popup-" + $(me).attr("id")); 

    popup_clear_show_timer(); 
    clearTimeout(popup_reset_timer); 

    e.hide(); 
    if(e == popup_elem) { 
    popup_elem = 2; 
    } 
    popup_reset_timer = setTimeout('popup_reset()',Drupal.settings.views_popup.reset_time); 
} 

function popup_reset(){ 
    popup_time = Drupal.settings.views_popup.popup_delay; 
} 
+0

이상하게 복잡합니다. 이 코드 묶음을 삭제하고 다음을 작성하십시오. A) 링크 위에있을 때 호버를 표시하고, B) 링크에 있지 않을 때 호버를 숨 깁니다. 일단 그 함수가 작동하면, onMouseOver, onMouseOut 이벤트로 함수를 호출하도록하십시오. 이제 작동하고있을 때 지연 타이머로 onMouseOver 함수를 호출하는 다른 함수를 호출하십시오. 이제 코드가 작동합니다. – blakev

+0

고마워, 블레이크. 위의 코드를 작성하지 않았습니다. 그것은 Drupal 6x 모듈에서 왔습니다. 몇 가지 이유 때문에 코드 위의 코드를 제거하지 않아야한다고 생각합니다. 1) 모듈을 사용하여 다른 것을 깨뜨릴 수 있습니다. 2) 나는 코더가 아니며 내가 무엇을하고 있는지 전혀 모른다! 그것은 일종의 시간 초과 지연을 mouseout 함수에 추가하는 것과 같습니다. 여기에 속임수가 있습니다 : .mouseout (function() { popup_hide (this); }) – user1800643

+0

답변을 참조하십시오, 행운을 빌어 요! 플러그인에있는 setTimeouts는 함수를 따옴표로 묶어서 문자열로 변환합니다. 추가 한 경우 따옴표와 괄호를 제거하십시오. 괄호가 호출을 시작하고 괄호가 없으면 나중에 호출 할 함수 자체에 대한 참조 만 전달합니다. – blakev

답변

0

- 당신은 팝업 숨기기위한 지연 시간을 설정할 것을, 당신이 할 수있는 것은 자바 스크립트의 setTimeout(function, delay) 함수를 호출 할 수 있습니다 : 여기

코드입니다 delay 밀리 초 후에 콜백을 시작합니다. 일초 경과 후

function popup_hide(me) { 
    e = $("#views-popup-" + $(me).attr("id")); 

    popup_clear_show_timer(); 
    clearTimeout(popup_reset_timer); 

    var delay = 1000; // ms 
    setTimeout(e.hide, delay); // <------- here 

    if(e == popup_elem) { 
    popup_elem = 2; 
    } 
    popup_reset_timer = setTimeout('popup_reset()',Drupal.settings.views_popup.reset_time); 
} 

이 e.hide (함수)를 호출한다.

+0

고마워, 블레이크! "var delay = 1000; // ms"그런 다음 다음 줄을 다시 추가합니다 (따옴표 붙지 않음). "setTimeout (e.hide, delay);// 5000 "(5 초 지연), js 파일에 붙여 넣기, 업로드, 비어있는 캐시 등이 작동하지 않습니다. :-(이걸로 귀찮게해서 죄송합니다. 다른 생각이나 제안이 있으십니까? 당신의 모든 도움에 감사드립니다. – user1800643

+0

흠 ... 버머, 이것도 시도해 볼 수 있습니다 : http://pastebin.com/3R5KENZH – blakev

+0

나는 코더가 아니지만이 두 가지 모두 실행 가능한 옵션처럼 보이지만 작동하지 않습니다. :-(아마이 모듈은이 작업을 수행 할 수 없습니다. 다시 한번 감사드립니다! – user1800643

관련 문제