UNPKG

3.11 kBJavaScriptView Raw
1import isElement from '@yelloxing/core.js/isElement';
2
3export default {
4
5 // 阻止冒泡
6 "stopPropagation": function (event) {
7 event = event || window.event;
8 if (event.stopPropagation) { //这是其他非IE浏览器
9 event.stopPropagation();
10 } else {
11 event.cancelBubble = true;
12 }
13 },
14
15 // 阻止默认事件
16 "preventDefault": function (event) {
17 event = event || window.event;
18 if (event.preventDefault) {
19 event.preventDefault();
20 } else {
21 event.returnValue = false;
22 }
23 },
24
25 // 绑定事件
26 "bind": function (el, eventType, callback) {
27 if (window.attachEvent) {
28 el.attachEvent("on" + eventType, callback); // 后绑定的先执行
29 } else {
30 el.addEventListener(eventType, callback, false);// 捕获
31 }
32 },
33
34 // 触发事件
35 "trigger": function (dom, eventType) {
36 let event;
37
38 //创建event的对象实例。
39 if (document.createEventObject) {
40 // IE浏览器支持fireEvent方法
41 event = document.createEventObject();
42 dom.fireEvent('on' + eventType, event);
43 }
44
45 // 其他标准浏览器使用dispatchEvent方法
46 else {
47 event = document.createEvent('HTMLEvents');
48 // 3个参数:事件类型,是否冒泡,是否阻止浏览器的默认行为
49 event.initEvent(eventType, true, false);
50 dom.dispatchEvent(event);
51 }
52 },
53
54 // 变成结点
55 "toNode": function (template) {
56 let frame = document.createElement("div");
57 frame.innerHTML = template;
58 let childNodes = frame.childNodes;
59 for (let i = 0; i < childNodes.length; i++) {
60 if (isElement(childNodes[i])) return childNodes[i];
61 }
62 return null;
63 },
64
65 // 结点
66 "appendTo": function (el, template) {
67 let node = isElement(template) ? template : this.toNode(template);
68 el.appendChild(node);
69 return node;
70 },
71
72 // 修改样式
73 "css": function (el, styles) {
74 for (let key in styles) {
75 el.style[key] = styles[key];
76 }
77 },
78
79 // 修改属性
80 "attr": function (el, attrs) {
81 for (let key in attrs) {
82 el.setAttribute(key, attrs[key]);
83 }
84 },
85
86 // 获取鼠标相对特定元素左上角位置
87 "position": function (el, event) {
88
89 event = event || window.event;
90
91 // 返回元素的大小及其相对于视口的位置
92 let bounding = el.getBoundingClientRect();
93
94 if (!event || !event.clientX)
95 throw new Error('Event is necessary!');
96 let temp = {
97
98 // 鼠标相对元素位置 = 鼠标相对窗口坐标 - 元素相对窗口坐标
99 "x": event.clientX - bounding.left + el.scrollLeft,
100 "y": event.clientY - bounding.top + el.scrollTop
101 };
102
103 return temp;
104 }
105};
\No newline at end of file