引子:原生JS貌似没有获取元素已绑定事件的方法,查了查实在没找到,只能自个儿写一个了
有人说让用Chrome的window.getEventListeners(elemObj)去获取,可是我的还是报错,实在没辙了,用最笨的办法一劳永逸吧,懒人有懒人的办法,这样不就好多了嘛
重新封装全局绑定事件和移除事件方法
function addEvent(obj, type, callback, useCapture=false) {
obj.addEventListener(type, callback, useCapture);
addEventList(obj, type, callback, useCapture);
}
function removeEvent (obj, type, callback, useCapture=false) {
obj.removeEventListener(type, callback, useCapture);
removeEventList(obj, type, callback, useCapture);
}
function addEventList(obj, type, callback, useCapture=false) {
if (obj.eventList) {
if (obj.eventList[type]) {
obj.eventList[type].push({ callback: callback, useCapture: useCapture });
} else {
obj.eventList[type] = [{ callback: callback, useCapture: useCapture }];
}
} else {
obj.eventList = {};
obj.eventList[type] = [{ callback: callback, useCapture: useCapture }];
}
}
function removeEventList(obj, type, callback, useCapture=false) {
let eventList=obj.eventList;
if (eventList) {
if (eventList[type]) {
for (let i = 0; i < eventList[type].length; i++) {
if (eventList[type][i].callback===callback) {
eventList[type].splice(i, 1);
if (eventList[type].length===0) {
delete eventList[type];
}
break;
}
}
}
}
}
function hasEvent(obj, type, callback, useCapture=false){
let flag = false;
if(obj && obj.eventList){
let eventList = obj.eventList;
if(eventList[type]){
for(let i=0;i<eventList[type].length; i++){
if(eventList[type][i].callback === callback){
flag = true;
}
}
}
}
return flag;
}
Object.defineProperty(Vue.prototype, 'addEvent', {
value: addEvent
});
Object.defineProperty(Vue.prototype, 'removeEvent', {
value: removeEvent
});
Object.defineProperty(Vue.prototype, 'addEventList', {
value: addEventList
});
Object.defineProperty(Vue.prototype, 'removeEventList', {
value: removeEventList
});
Object.defineProperty(Vue.prototype, 'hasEvent', {
value: hasEvent
});
main.js引入
import './plugins/global.ref';
index.vue
<router-view ref="childElem" :outHeight="this.outHeight"></router-view>
this.addEvent(window, "resize", () => {
if(this.$refs.childElem.move) this.$refs.childElem.move();
});
子组件:
methods:{
downMoveFlag(e){
console.log('downMoveFlag');
},
upMoveFlag(){
console.log('upMoveFlag');
},
moveLine(e){
console.log('moveLine');
},
move() {
let eventList = this.outObj.eventList?this.outObj.eventList:null;
if(eventList){
this.removeEvent(this.outObj,"mousedown",this.downMoveFlag,false);
this.removeEvent(this.outObj,"mousemove", this.moveLine,false);
this.removeEvent(this.outObj,"mouseup", this.upMoveFlag,false);
}
this.addEvent(this.outObj,"mousedown",this.downMoveFlag,false);
this.addEvent(this.outObj,"mousemove", this.moveLine,false);
this.addEvent(this.outObj,"mouseup", this.upMoveFlag,false);
}
}