Javascript 需要在此代码中添加鼠标出的延迟

Javascript 需要在此代码中添加鼠标出的延迟,javascript,popup,drupal-6,Javascript,Popup,Drupal 6,这是Drupal6.x模块“视图弹出”的一些javascript。 当鼠标离开触发弹出窗口的链接时,我似乎无法设置弹出窗口的延迟。我有标题,挑逗文字和更多的链接在弹出窗口,用户需要能够移动鼠标离开链接(图像),以点击“阅读更多”链接。我尝试过调整下面代码中的所有设置,但没有一个与此相关。我不是一个编码员,但我认为需要添加一些东西来实现这一点。如有任何建议,将不胜感激 代码如下: var popup_time = 0; var popup_elem = 0; var popup_show_tim

这是Drupal6.x模块“视图弹出”的一些javascript。

当鼠标离开触发弹出窗口的链接时,我似乎无法设置弹出窗口的延迟。我有标题,挑逗文字和更多的链接在弹出窗口,用户需要能够移动鼠标离开链接(图像),以点击“阅读更多”链接。我尝试过调整下面代码中的所有设置,但没有一个与此相关。我不是一个编码员,但我认为需要添加一些东西来实现这一点。如有任何建议,将不胜感激

代码如下:

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;
}

因此,假设上面的代码按照您想要的方式工作——并且您想要为弹出窗口设置一个要隐藏的延迟,那么您可以调用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);
}
功能弹出\隐藏(me){
e=$(“#视图弹出窗口-”+$(me.attr(“id”));
弹出\清除\显示\计时器();
clearTimeout(弹出复位定时器);
var delay=1000;//毫秒

设置超时(例如隐藏、延迟);//这太复杂了。删除一堆代码,然后编写以下内容:a)在链接上显示悬停,B)在不在链接上时隐藏悬停。一旦工作正常,就使用onMouseOver、onMouseOut事件调用这些函数……现在,在工作时,调用另一个调用你的onMouseOver函数带有一个延迟计时器。现在你的代码可以工作了。谢谢,Blake。我没有写上面的代码。它来自Drupal 6x模块。我认为我不应该删除上面的一堆代码,原因有两个:1)我可能会破坏模块的其他部分;2)我不是一个编码员,也不知道我在做什么!看起来像是在添加这里mouseout函数的某种定时延迟可以起到以下作用:。mouseout(function(){popup_hide(this);})请参阅答案,祝你好运!插件中的setTimeout似乎将函数放在引号中--这会将它们转换为字符串。如果你添加了引号,请删除引号和括号。括号启动调用,缺少括号只是传递了对函数本身的引用,以便稍后调用。谢谢,Blake!我复制了上面答案中的两行新代码(不带引号)“var delay=1000;//ms”然后添加了下一行(同样带引号)“setTimeout(e.hide,delay);//5000”(延迟5秒),将其粘贴到js文件中,上传,清空缓存,但它不起作用-(很抱歉给您添麻烦。您还有其他想法或建议吗?谢谢您的帮助。我不是一名编码员,但这两种方法似乎都是可行的,但都不管用。:-(也许本模块无法做到这一点。再次感谢!