1. 仅输入数字
Vue.directive('onlyNumber', {
inserted: function (targetDom) {
targetDom.addEventListener('keypress', function (event) {
event = event || window.event;
let charcode = typeof event.charCode === 'number' ? event.charCode : event.keyCode;
if (!/\d/.test(String.fromCharCode(charcode)) && charcode > 9 && !event.ctrlKey) {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
});
}
});
2. 自动聚焦
Vue.directive('focus', {
inserted: function (el) {
el.focus()
}
})
3.点击复制到剪切板
// <div v-copy="number">copy</div>
Vue.directive('copy', {
bind: function (targetDom) {
targetDom.addEventListener('click', function (event) {
let $input = document.createElement('textarea')
$input.style.opacity = '0'
$input.value = targetDom.dataset.copyValue
document.body.appendChild($input)
$input.select()
document.execCommand('copy')
document.body.removeChild($input)
$input = null
});
},
// 更新存储的值,存储在 dom 的 dataset 中
update: function (el, binding) {
el.dataset.copyValue = binding.value
}
})
4. 快捷键映射
Vue.directive('shortcut', {
bind: function (targetDom, binding) {
targetDom.shortcutFun = function (event) {
Object.keys(binding.value).forEach((key) => {
event.keyCode.toString() === key && binding.value[key]()
})
}
window.addEventListener('keyup', targetDom.shortcutFun)
},
unbind: function (targetDom) {
window.removeEventListener('keyup', targetDom.shortcutFun)
}
})