2013-08-27 31 views
0

这是一个名为“视图弹出窗口”的drupal 6.x模块的一些JavaScript。 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

因此,假设上面的代码工作,你怎么想 - 并要设置弹出隐藏的延迟,你所能做的就是调用JavaScript的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); 
} 

这将在1秒后通过e.hide(函数)。

+0

谢谢,布莱克!我从上面的答案中复制了两行代码(不带引号)“var delay = 1000; // ms”,然后添加下一行(再次引用w/out)“setTimeout(e.hide,delay);// 5000“(延迟5秒),将其粘贴到js文件中,上传,清空缓存,并且不起作用。 :-(对不起,有这样的麻烦,你有没有其他的想法或建议,谢谢你的帮助, – user1800643

+0

嗯......不好意思,你也可以试试这个:http://pastebin.com/3R5KENZH – blakev

+0

我不是一个编码器,但是这两个看起来都是可行的选择,但都不起作用。:-(也许这个模块不能做到这一点,再次感谢! – user1800643