Keyboard是一个使用jQuery UI构建的jQuery插件,它为您的项目添加了一个屏幕上的虚拟键盘,当指定的输入字段聚焦时,它将弹出。它可以移动,也可以用作科学计算器。
# NPM $ npm install virtual-keyboard # Bower $ bower install virtual-keyboard
1.在页面上包括jQuery库和jQuery键盘插件的文件。
<!-- Core Stylesheet --> <link href="css/keyboard.css" rel="stylesheet" /> <!-- Light Theme --> <link href="css/keyboard-basic.css" rel="stylesheet" /> <!-- Dark Theme --> <link href="css/keyboard-dark.css" rel="stylesheet" /> <!-- CSS for the preview keyset extension --> <link href="css/keyboard-previewkeyset.css" rel="stylesheet" /> <!-- jQuery Is Required --> <script src="/path/to/cdn/jquery.min.js"></script> <!-- Core JavaScript --> <script src="js/jquery.keyboard.js"></script> <!-- With All Extensions --> <script src="js/jquery.keyboard.extension-all.js"></script>
2.根据您的需要包括其他可选资源。
<!-- jQuery UI Themes --> <script src="/path/to/cdn/jquery-ui.min.js"></script> <link rel="stylesheet" href="/path/to/cdn/jquery-ui.min.css" /> <!-- Or Bootstrap Theme --> <link rel="stylesheet" href="/path/to/cdn/bootstrap.min.css" /> <!-- Mousewheel support --> <script src="/path/to/jquery.mousewheel.js"></script>
3.如果需要,包括键盘插件的扩展。
<!-- Show alternate keys in a popup --> <script src="js/jquery.keyboard.extension-altkeypopup.js"></script> <!-- Integrate with jQuery UI's autocomplete widget --> <script src="js/jquery.keyboard.extension-autocomplete.js"></script> <!-- Add a caret with custom styling --> <script src="js/jquery.keyboard.extension-caret.js"></script> <!-- Add a togglable layout --> <script src="js/jquery.keyboard.extension-extender.js"></script> <!-- Use with jQuery Mobile & jQuery Mobile --> <script src="js/jquery.keyboard.extension-mobile.js"></script> <!-- Use arrow, home, end & page up/down to navigate inside of the keyboard --> <script src="js/jquery.keyboard.extension-navigation.js"></script> <!-- Add a preview of chosen keysets; display & position of the preview is accomplished through css --> <script src="js/jquery.keyboard.extension-previewkeyset.js"></script> <!-- Scramble the entire keyset or by row, once or every time the keyboard is opened for added security --> <script src="js/jquery.keyboard.extension-scramble.js"></script> <!-- Allows you to simulate typing into the keyboard for demo purposes or to assist user input --> <script src="js/jquery.keyboard.extension-typing.js"></script>
4.将虚拟键盘连接到您的元素,如文本区域、输入字段或contentEditable元素。
<input id="keyboard" type="text">
$(function(){ $('#keyboard').keyboard({ // options here }); });
5.可用于自定义虚拟键盘的选项。
// set this to ISO 639-1 language code to override language set by the layout // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes // language defaults to 'en' if not found language: null, // RTL or LTR rtl: false, // 'alpha' - Alphabetical layout. // 'colemak' - Colemak layout. // 'custom' - Uses a custom layout as defined by the customLayout option. // 'dvorak' - Dvorak Simplified layout. // 'international' - Standard US-international QWERTY layout. // 'num' - Numerical (ten-key) layout. // 'numpad' - Numerical layout with left & right caret keys (added by extender extension). // 'qwerty' - Standard U.S. QWERTY layout. // or 'custom'. see below layout: 'qwerty', // custom layout // { // 'normal' : ['a b c d e', 'f g h i j', '{shift} {meta1} {a} {c}'], // 'shift' : ['A B C D E', 'F G H I J', '{shift} {meta1} {a} {c}'], // 'meta1' : ['1 2 3 4 5', '6 7 8 9 0', '{shift} {meta1} {a} {c}'] // } customLayout: null, position: { // optional - null (attach to input/textarea) or a jQuery object (attach elsewhere) of: null, my: 'center top', at: 'center top', // used when 'usePreview' is false (centers the keyboard at the bottom of the input/textarea) at2: 'center bottom' }, // allow jQuery position utility to reposition the keyboard on window resize reposition: true, // preview added above keyboard if true, original input/textarea used if false usePreview: true, // if true, the keyboard will always be visible alwaysOpen: false, // give the preview initial focus when the keyboard becomes visible initialFocus: true, // avoid changing the focus (hardware keyboard probably won't work) noFocus: false, // if true, keyboard will remain open even if the input loses focus, but closes on escape // or when another keyboard opens. stayOpen: false, // Prevents the keyboard from closing when the user clicks or presses outside the keyboard // the `autoAccept` option must also be set to true when this option is true or changes are lost userClosed: false, // if true, keyboard will not close if you press escape. ignoreEsc: false, // if true, keyboard will only closed on click event instead of mousedown and touchstart closeByClickEvent: false, css: { // input & preview input: 'ui-widget-content ui-corner-all', // keyboard container container: 'ui-widget-content ui-widget ui-corner-all ui-helper-clearfix', // keyboard container extra class (same as container, but separate) popup: '', // default state buttonDefault: 'ui-state-default ui-corner-all', // hovered button buttonHover: 'ui-state-hover', // Action keys (e.g. Accept, Cancel, Tab, etc); this replaces 'actionClass' option buttonAction: 'ui-state-active', // Active keys (e.g. shift down, meta keyset active, combo keys active) buttonActive: 'ui-state-active', // used when disabling the decimal button {dec} when a decimal exists in the input area buttonDisabled: 'ui-state-disabled', buttonEmpty: 'ui-keyboard-empty' }, // *** Useability *** // Auto-accept content when clicking outside the keyboard (popup will close) autoAccept: false, // Auto-accept content even if the user presses escape (only works if `autoAccept` is `true`) autoAcceptOnEsc: false, // Prevents direct input in the preview window when true lockInput: false, // Prevent keys not in the displayed keyboard from being typed in restrictInput: false, // Additional allowed characters while restrictInput is true restrictInclude: '', // e.g. 'a b foo \ud83d\ude38' // Check input against validate function, if valid the accept button gets a class name of // 'ui-keyboard-valid-input'. If invalid, the accept button gets a class name of // 'ui-keyboard-invalid-input' acceptValid: false, // Auto-accept when input is valid; requires `acceptValid` set `true` & validate callback autoAcceptOnValid: false, // Check validation on keyboard initialization. If false, the "Accept" key state (color) // will not change to show if the content is valid, or not checkValidOnInit: true, // if acceptValid is true & the validate function returns a false, this option will cancel // a keyboard close only after the accept button is pressed cancelClose: true, // tab to go to next, shift-tab for previous (default behavior) tabNavigation: false, // enter for next input; shift+enter accepts content & goes to next // shift + 'enterMod' + enter ('enterMod' is the alt as set below) will accept content and go // to previous in a textarea enterNavigation: false, // mod key options: 'ctrlKey', 'shiftKey', 'altKey', 'metaKey' (MAC only) enterMod: 'altKey', // alt-enter to go to previous; shift-alt-enter to accept & go to previous // if true, the next button will stop on the last keyboard input/textarea; prev button stops at first // if false, the next button will wrap to target the first input/textarea; prev will go to the last stopAtEnd: true, // Set this to append the keyboard after the input/textarea (appended to the input/textarea parent). // This option works best when the input container doesn't have a set width & when the 'tabNavigation' // option is true. appendLocally: false, // When appendLocally is false, the keyboard will be appended to this object appendTo: 'body', // Wrap all <br>s inside of a contenteditable in a div; without wrapping, the caret // position will not be accurate wrapBRs: true, // If false, the shift key will remain active until the next key is (mouse) clicked on; if true it will // stay active until pressed again stickyShift: true, // Prevent pasting content into the area preventPaste: false, // caret placed at the end of any text when keyboard becomes visible caretToEnd: false, // caret stays this many pixels from the edge of the input while scrolling left/right; // use "c" or "center" to center the caret while scrolling scrollAdjustment: 10, // Set the max number of characters allowed in the input, setting it to false disables this option maxLength: false, // allow inserting characters @ caret when maxLength is set maxInsert: true, // Mouse repeat delay - when clicking/touching a virtual keyboard key, after this delay the key will // start repeating repeatDelay: 500, // Mouse repeat rate - after the repeatDelay, this is the rate (characters per second) at which the // key is repeated Added to simulate holding down a real keyboard key and having it repeat. I haven't // calculated the upper limit of this rate, but it is limited to how fast the javascript can process // the keys. And for me, in Firefox, it's around 20. repeatRate: 20, // resets the keyboard to the default keyset when visible resetDefault: true, // Event (namespaced) on the input to reveal the keyboard. To disable it, just set it to ''. openOn: 'focus', // enable the keyboard on readonly inputs activeOnReadonly: false, // Event (namepaced) for when the character is added to the input (clicking on the keyboard) keyBinding: 'mousedown touchstart', // enable/disable mousewheel functionality // enabling still depends on the mousewheel plugin useWheel: true, // combos (emulate dead keys : http://en.wikipedia.org/wiki/Keyboard_layout#US-International) // if user inputs `a the script converts it to à , ^o becomes ô, etc. useCombos: true, /* // *** Methods *** // commenting these out to reduce the size of the minified version // Callbacks - attach a function to any of these callbacks as desired initialized : function(e, keyboard, el) {}, beforeVisible : function(e, keyboard, el) {}, visible : function(e, keyboard, el) {}, beforeInsert : function(e, keyboard, el, textToAdd) { return textToAdd; }, change : function(e, keyboard, el) {}, beforeClose : function(e, keyboard, el, accepted) {}, accepted : function(e, keyboard, el) {}, canceled : function(e, keyboard, el) {}, restricted : function(e, keyboard, el) {}, hidden : function(e, keyboard, el) {}, // called instead of base.switchInput switchInput : function(keyboard, goToNext, isAccepted) {}, // used if you want to create a custom layout or modify the built-in keyboard create : function(keyboard) { return keyboard.buildKeyboard(); }, // build key callback buildKey : function( keyboard, data ) { / * data = { // READ ONLY isAction : [boolean] true if key is an action key name : [string] key class name suffix ( prefix = 'ui-keyboard-' ); may include decimal ascii value of character value : [string] text inserted (non-action keys) title : [string] title attribute of key action : [string] keyaction name html : [string] HTML of the key; it includes a <span> wrapping the text // use to modify key HTML $key : [object] jQuery selector of key which is already appended to keyboard } * / return data; }, */ // this callback is called, if the acceptValid is true, and just before the 'beforeClose' to check // the value if the value is valid, return true and the keyboard will continue as it should // (close if not always open, etc). If the value is not valid, return false and clear the keyboard // value ( like this "keyboard.$preview.val('');" ), if desired. The validate function is called after // each input, the 'isClosing' value will be false; when the accept button is clicked, // 'isClosing' is true validate: function (/* keyboard, value, isClosing */) { return true; }
6.API方法
// reveal the keyboard keyboard.reveal(); // redraw the keyboard keyboard.redraw(); // accept keyboard content keyboard.accept(); // close the keyboard keyboard.close(); // insert text at the current caret position keyboard.insertText("text"); // param1: start & end numeric value of the caret position // param2: only used if a numeric caret end value is set to enable text selection keyboard.caret(param1, param2); // heck the current keyboard contents for letter combinations and convert them keyboard.checkCombos(); // check the length of the current keyboard contents and remove any excess keyboard.checkMaxLength(); // get the current key set keyboard.getKeySet(); // show the key set keyboard.showKeySet(meta); // reposition the keyboard keyboard.reposition(); // toggle the keyboard keyboard.toggle(); // destroy the instance keyboard.destroy(); // get the current value keyboard.$preview.val(); // access any of the options keyboard.options.{option}; // return true when the keyboard is the current keyboard.isCurrent();
7.财产。
// the text from the input/textarea before the keyboard opened keyboard.originalContent // information about the last key pressed keyboard.last // is the keyboard visible keyboard.isVisible // true when the shift key is active keyboard.shiftActive // true when the alt key is active keyboard.altActive // true when the meta key is active keyboard.metaActive // true when the caps lock key is active keyboard.capsLock // true when the keyboard (all keys and preview) is enabled keyboard.enabled
8.事件。
$('#keyboard').on('initialized', function(e, keyboard, el){ // el.id // el.value }); $('#keyboard').on('beforeVisible', function(e, keyboard, el){ // do something }); $('#keyboard').on('visible', function(e, keyboard, el){ // do something }); $('#keyboard').on('change', function(e, keyboard, el){ // do something }); $('#keyboard').on('keyboardChange', function(e, keyboard, el){ // do something }); $('#keyboard').on('beforeClose', function(e, keyboard, el, accepted){ // do something }); $('#keyboard').on('accepted', function(e, keyboard, el){ // do something }); $('#keyboard').on('canceled', function(e, keyboard, el){ // do something }); $('#keyboard').on('hidden', function(e, keyboard, el){ // do something }); $('#keyboard').on('inactive', function(e, keyboard, el){ // do something }); $('#keyboard').on('restricted', function(e, keyboard, el){ // do something }); $('#keyboard').on('keysetChange', function(e, keyboard, el){ // do something });
v1.30.4 (2021-01-25)
v1.30.3 (2021-03-15)
v1.30.2 (2020-05-12)