input输入框记录快捷键组合

本文介绍如何使用 AngularJS 在 Node-WebKit 客户端实现自定义快捷键功能,通过监听键盘事件并记录用户的快捷键设置。此外,还提供了一个 CURSOR_LOCATOR 对象用于操作输入框中的光标位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快捷键保存,一个是用几个select让用户去选择ctrl+alt+字母数字 的组合,另一种是input输入框让用户直接按下记录下来,当然第二种更方便.

在一个node-webkit客户端用Angular.js来绑定一些事件,实现了这个功能.

代码如下:

<div class="uk-form-controls padding10">
        <label for="conf-hotkey-screenCapture-value">屏幕截图</label>
        <input type="text" id="conf-hotkey-screenCapture-value" ng-keydown="sethotKey($event)" ng-model="sysconf.hotkey.screenCapture.value">
</div>

//保存上次快捷键
var lastHotkey="";
//设置快捷键
$scope.sethotKey = function($event){
      var keyValue=[];
      if($event.ctrlKey) keyValue.push("Ctrl");
      if($event.altKey) keyValue.push("Alt");
      if($event.shiftKey) keyValue.push("Shift");
      var keyCodeMap={"48":"0","49":"1","50":"2","51":"3","52":"4","53":"5","54":"6","55":"7","56":"8","57":"9","65":"A","66":"B","67":"C","68":"D","69":"E","70":"F","71":"G","72":"H","73":"I","74":"J","75":"K","76":"L","77":"M","78":"N","79":"O","80":"P","81":"Q","82":"R","83":"S","84":"T","85":"U","86":"V","87":"W","88":"X","89":"Y","90":"Z"};
     if(keyCodeMap[$event.keyCode]){
       keyValue.push(keyCodeMap[$event.keyCode]);      
     }
     $event.target.value = keyValue.join("+");
     CURSOR_LOCATOR.setCursorPosition($event.target,"end");
     $event.preventDefault();
     if(keyValue.length>=2&&keyCodeMap[$event.keyCode]){
        $($event.target).removeClass("uk-form-danger").addClass("uk-form-success");
          global.EVENT.emit("globalShortcutReg","getMessage",true);
          lastHotkeyGetmessage=$event.target.value;
     }else{
        $($event.target).addClass("uk-form-danger").removeClass("uk-form-success");       
        return false;
     }
    };

/* CURSOR_LOCATOR
 * textarea或input 光标操作函数
 * getPosition(t) 获得位置信息
 * getCursorPosition(t) 光标位置
 * setCursorPosition(t, p) 设置光标位置
 * add(t,txt) 添加内容到光标处
 */
var CURSOR_LOCATOR = {  
  getPosition:function(t){
        var o = t.getBoundingClientRect();
        var w = t.offsetWidth;
        var h = t.offsetHeight;
        var s = t.style;
        return {top:o.top, left:o.left, width:w, height:h , style:s};
    },  
    getCursorPosition: function(t){
        if (document.selection) {
            t.focus();
            var ds = document.selection;
            var range = null;
            range = ds.createRange();
            var stored_range = range.duplicate();
            stored_range.moveToElementText(t);
            stored_range.setEndPoint("EndToEnd", range);
            t.selectionStart = stored_range.text.length - range.text.length;
            t.selectionEnd = t.selectionStart + range.text.length;
            return t.selectionStart;
        } else return t.selectionStart
    },  
    setCursorPosition:function(t, p){
        var n = p == 'end' ? t.value.length : p;
        if(document.selection){
            var range = t.createTextRange();
            range.moveEnd('character', -t.value.length);       
            range.moveEnd('character', n);
            range.moveStart('character', n);
            range.select();
        }else{
            t.setSelectionRange(n,n);
            t.focus();
        }
    },  
    add:function (t, txt,addPosition){
        var val = t.value;
        var wrap = wrap || '' ;
        if(document.selection){
            document.selection.createRange().text = txt;
        } else {
          if(typeof(addPosition)!="undefined"){
            var ubbLength = t.value.length;
            t.value = t.value.slice(0,addPosition) + txt + t.value.slice(addPosition, ubbLength);
          }else{
              var cp = t.selectionStart;
              var ubbLength = t.value.length;
              t.value = t.value.slice(0,t.selectionStart) + txt + t.value.slice(t.selectionStart, ubbLength);
              this.setCursorPosition(t, cp + txt.length);
          }
        };
    },  
    del:function(t, n){
        var p = this.getCursorPosition(t);
        var s = t.scrollTop;
        t.value = t.value.slice(0,p - n) + t.value.slice(p);
        this.setCursorPosition(t ,p - n);
    }
};


转载于:https://my.oschina.net/u/265765/blog/335939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值