|
19 | 19 | /**
|
20 | 20 | * see in https://github.com/wesbos/keycodes
|
21 | 21 | */
|
22 |
| - var keyCodes = { |
| 22 | + const keyCodes = { |
23 | 23 | 0: 'That key has no keycode',
|
24 | 24 | 3: 'break',
|
25 | 25 | 8: 'backspace / delete',
|
|
193 | 193 | 251: "unlock trackpad (Chrome/Edge)",
|
194 | 194 | 255: 'toggle touchpad',
|
195 | 195 | };
|
196 |
| - var keyCodesChangeKV = Object.entries(keyCodes).reduce((prev, next) => ({ |
| 196 | + const keyCodesChangeKV = Object.entries(keyCodes).reduce((prev, next) => ({ |
197 | 197 | ...prev,
|
198 | 198 | [next[1]]: next[0]
|
199 | 199 | }), {})
|
|
203 | 203 | root.preKeyCombination = root.keyCombination;
|
204 | 204 | }
|
205 | 205 | // 存储全局变量减少引用查找
|
206 |
| - var win = root; |
| 206 | + const win = root; |
207 | 207 |
|
208 | 208 | // 组合键检测。当keydown命中事件集后,我们再对子集做判断执行
|
209 | 209 |
|
|
214 | 214 | * '13,75': []
|
215 | 215 | * }
|
216 | 216 | */
|
217 |
| - var noop = function () {} |
| 217 | + const noop = function () {} |
218 | 218 |
|
219 | 219 | /**
|
220 | 220 | * @description 构造函数
|
221 | 221 | * @param {Object} options
|
222 | 222 | * @default {isElement: false, bindElement: {removeEventListener: noop}, element: null, _tempMap: []}
|
223 | 223 | */
|
224 | 224 | function keyCombination(options){
|
225 |
| - var isElement, |
| 225 | + let isElement, |
226 | 226 | element,
|
227 | 227 | _tempMap,
|
228 | 228 | bindElement
|
|
231 | 231 | return new keyCombination(arguments)
|
232 | 232 | }
|
233 | 233 |
|
234 |
| - var eventMap = {} |
| 234 | + const eventMap = {} |
235 | 235 |
|
236 | 236 |
|
237 | 237 | // 初始化函数
|
|
240 | 240 | isElement = options.element && options.element
|
241 | 241 | element = options.element || null
|
242 | 242 | _tempMap = []
|
243 |
| - bindElement = !isElement ? window : |
| 243 | + bindElement = !isElement ? win : |
244 | 244 | (element instanceof HTMLElement) ? element :
|
245 | 245 | {removeEventListener: noop}
|
246 | 246 | }
|
|
250 | 250 |
|
251 | 251 |
|
252 | 252 | // 移除判断
|
253 |
| - var removeEventAction = function removeEventAction (e) { |
| 253 | + const removeEventAction = function removeEventAction (e) { |
254 | 254 | _tempMap = []
|
255 | 255 | }.bind(this)
|
256 | 256 |
|
257 | 257 | // 绑定动作函数
|
258 |
| - var bindEventAction = function bindEventAction (e) { |
259 |
| - var tempMapLength = _tempMap.length |
| 258 | + const bindEventAction = function bindEventAction (e) { |
| 259 | + const tempMapLength = _tempMap.length |
260 | 260 | if (tempMapLength >= 0 && _tempMap[tempMapLength - 1] !== e.keyCode) {
|
261 | 261 | _tempMap.push(e.keyCode)
|
262 | 262 | }
|
263 |
| - var eventList = eventMap[_tempMap.toString()] |
| 263 | + const eventList = eventMap[_tempMap.toString()] |
264 | 264 | eventList && eventList.forEach(v => {
|
265 |
| - v && v() |
| 265 | + v && v(e) |
266 | 266 | })
|
267 | 267 | }.bind(this)
|
268 | 268 |
|
|
271 | 271 | * @param {String} keyCode 绑定组合键
|
272 | 272 | * @param {function} callback 回调函数
|
273 | 273 | */
|
274 |
| - var bindEvent = function binEvent(keyCode, callback) { |
275 |
| - var keyCodeList = keyCode.split(' ') |
276 |
| - var [first, second] = keyCodeList.map(v => keyCodesChangeKV[v]) |
277 |
| - var eventKeys = [first, second].toString() |
| 274 | + const bindEvent = function binEvent(keyCode, callback) { |
| 275 | + const keyCodeList = keyCode.split(' ') |
| 276 | + const [first, second] = keyCodeList.map(v => keyCodesChangeKV[v]) |
| 277 | + const eventKeys = [first, second].toString() |
278 | 278 | eventMap[eventKeys] = eventMap[eventKeys] || []
|
279 | 279 | eventMap[eventKeys].push(callback)
|
280 | 280 | }.bind(this)
|
281 | 281 |
|
282 | 282 | // 移除绑定存储事件回调
|
283 | 283 | function removeListeners(keyCode, callback) {
|
284 |
| - var keyCode = keyCode.split(' ') |
285 |
| - var [first, second] = keyCode.map(v => keyCodesChangeKV[v]) |
286 |
| - var eventKeys = [first, second].toString() |
| 284 | + const keyCode = keyCode.split(' ') |
| 285 | + const [first, second] = keyCode.map(v => keyCodesChangeKV[v]) |
| 286 | + const eventKeys = [first, second].toString() |
287 | 287 | eventMap[eventKeys] && (eventMap = eventMap[eventKeys].filter(v => v === callback))
|
288 | 288 | }
|
289 | 289 | // 判断绑定对象
|
|
299 | 299 | bindElement.addEventListener('keydown', bindEventAction, false)
|
300 | 300 | bindElement.addEventListener('keyup', removeEventAction, false)
|
301 | 301 | }
|
302 |
| - |
| 302 | + |
303 | 303 | subscribeAction()
|
304 | 304 |
|
305 | 305 | return {
|
306 |
| - bindEvent: bindEvent, |
307 |
| - removeListeners: removeListeners, |
308 |
| - detach: detach, |
309 |
| - subscribeAction: subscribeAction, |
310 |
| - init: init, |
311 |
| - eventMap: eventMap |
| 306 | + bindEvent, |
| 307 | + removeListeners, |
| 308 | + detach, |
| 309 | + subscribeAction, |
| 310 | + init, |
| 311 | + eventMap |
312 | 312 | }
|
313 | 313 | }
|
314 | 314 | //导出接口
|
|
0 commit comments