2013-07-13 96 views
0

基於此script我在Stack Overflow上找到了,我嘗試調整它以淡出HTML頁面上的編輯器面板。淡出效果很好,但我想限制淡出不被觸發。沒有鍵盤/鼠標輸入時的淡出控制

我希望完成的任務是防止鼠標懸停在編輯器面板(和子控件)上或當其中一個輸入子項中出現鍵盤活動時淡出。

var i = null; 

// this part is working 
$("#my-canvas").mousemove(function() { 
    clearTimeout(i); 
    $("#panel,#btn-panel-toggle,#fps").fadeIn(200); 
    var i = setTimeout('$("#panel,#btn-panel-toggle,#fps").fadeOut(800);', 3000); 
}) 

// this part is not working 
$("#panel").mouseover(function() { 
    clearTimeout(i); 
}) 

舉一個實例,請看看這個jsFiddle

回答

1

這裏需要兩個獨立變量來指示input#sc-url是否被聚焦,並且div#panel是否被鼠標懸停。然後,您可以用這些功能處理定時器:

$(function() { 

    var t = null; //timer 
    var is_url_focused = false, is_panel_hovered = false; 
    var panel = $('#panel'); 

    function hide_panel(){ 
     if (t) { 
      clearTimeout(t); 
     } 
     t = setTimeout(function(){ 
      if (is_url_focused || is_panel_hovered) { 
       return; 
      } 
      panel.stop().animate({ 
       opacity:0 
      },800, function(){ 
       panel.hide(); // == diplay:none 
      }); 
     },2000); 
    } 

    function show_panel(){ 
     panel.show().stop().animate({ 
      opacity:1 
     },800); 
    } 

    $('#my-canvas').mouseenter(function(){ 
     show_panel(); 
    }).mouseleave(function(){ 
     hide_panel(); 
    }); 
    $('#panel').hover(function(){ 
     is_panel_hovered = true; 
     show_panel(); 
    }, function(){ 
     is_panel_hovered = false; 
     hide_panel(); 
    }); 
    $('#sc-url').focus(function(){ 
     is_url_focused = true; 
     show_panel(); 
    }).blur(function(){ 
     is_url_focused = false; 
     hide_panel(); 
    }); 
    $('#btn-panel-toggle').click(function(){ 
     if (panel.is(':hidden')) { 
      panel.css('opacity',1).show(); 
     } else { 
      panel.css('opacity',0).hide(); 
     } 
    }); 

}); 

http://jsfiddle.net/w9dv4/3/

+0

根據需要這個工程差不多。然而,它只是在指針已經在面板上之後才初始化。此外,隱藏後只顯示懸停在面板上(而不是整個畫布)。我嘗試了一些東西,但沒有按要求工作。 – idleberg

+0

這是真的,我希望編輯器面板在有人使用它時保持可見。然而,如果有人從不使用編輯器,它應該淡出。一旦淡出,(全尺寸)畫布上的任何鼠標移動都應淡入其中(否則必須知道隱藏面板的位置)。 – idleberg

+0

大概理解,謝謝澄清!所以面板應該只在鼠標懸停在畫布上時出現。 – Stano