2016-02-02 199 views
19

我試圖找到一種方法來模擬按鍵。如何在JavaScript中模擬按鍵?

例如,當功能啓動時,應該按下「向下箭頭鍵」,因此網頁應該稍微滾動一下。

我只對Chrome感興趣,並且jQuery或plain JS都適合。 (普通JS將是更可取的)。

這就是代碼的例子,我試過一個:

var e = $.Event("keydown", { keyCode: 40}); // 40 = down arrow 
$("body").trigger(e); 
// When I launch it the console, nothing happens. The page is not scrolled. 
// May be I missed some obvious? 

我搜查,發現了以下相關的問題,但解決方案並沒有爲我工作:


換句話說

使用AutoHotkey的,你可以很容易地做出這樣的:

Down:: 
Send, {Up} 

然後,如果按Down方向鍵,將會觸發Up。我只是想用JS來實現它。

+0

這聽起來很愚蠢,但是你在'HTML'中導入了'jQuery'嗎? – AMACB

+10

AFAIK觸發一個keydown事件只會使任何keydown處理程序進程。您實際上無法進行瀏覽器滾動,因爲滾動不是由JavaScript keydown事件完成的。爲什麼不能直接使用'scrollTop'操作來滾動文檔? – Amadan

+0

可以創建一個jsfiddle嗎? –

回答

6

正如@rfsbsb從指出:Jquery script for simulated key press down not running keyboard shortcut

如果你想解僱一些瀏覽器或系統範圍的鍵盤快捷鍵 那麼它是一個死衚衕 - 因安全原因無法完成。如果它可能是 ,那麼您可以在整個互聯網上使用 (例如)將它們自己添加到您的書籤中,而無需詢問 (通過使用Javascript發出CTRL + B快捷方式)。

5

使用this answer,我設法改變了一下代碼,我想我找到了你想要的東西?

here is my jsfiddle

代碼:

jQuery(document).ready(function($) { 
    $('body').keypress(function(e) { 
     if(e.which == '40') 
      $('body').animate({scrollTop: '100px'}); 
    }); 
}); 
jQuery.fn.simulateKeyPress = function(character) { 
    jQuery(this).trigger({ 
     type: 'keypress', 
     which: character 
    }); 
}; 

setTimeout(function() { 
    $('body').simulateKeyPress(40); 
}, 1000); 
2

下面是從@ Haring10的例子開始樣品:

https://jsfiddle.net/po33vfb4/4/

$('body').keydown(function(e) { 
    e.preventDefault(); 
    e.stopImmediatePropagation(); 

    if(e.which == 40) { 
    window.scrollBy(0, -100); 
    } else { 
    window.scrollBy(0, 100); 
    } 
}); 

觸發的keydown-KEYUP-按鍵編程似乎並不具有滾動的效應。上述示例可以自定義添加動畫。