UNPKG

3.99 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 "remove": function (el) {
74 el.parentNode.removeChild(el);
75 },
76
77 // 在被指定元素之后插入结点
78 "after": function (el, template) {
79 let node = isElement(template) ? template : this.toNode(template);
80 el.parentNode.insertBefore(node, el.nextSibling);
81 return node;
82 },
83
84 // 修改样式
85 "css": function (el, styles) {
86 for (let key in styles) {
87 el.style[key] = styles[key];
88 }
89 },
90
91 // 修改属性
92 "attr": function (el, attrs) {
93 for (let key in attrs) {
94 el.setAttribute(key, attrs[key]);
95 }
96 },
97
98 // 获取鼠标相对特定元素左上角位置
99 "position": function (el, event) {
100
101 event = event || window.event;
102
103 // 返回元素的大小及其相对于视口的位置
104 let bounding = el.getBoundingClientRect();
105
106 if (!event || !event.clientX)
107 throw new Error('Event is necessary!');
108 let temp = {
109
110 // 鼠标相对元素位置 = 鼠标相对窗口坐标 - 元素相对窗口坐标
111 "x": event.clientX - bounding.left + el.scrollLeft,
112 "y": event.clientY - bounding.top + el.scrollTop
113 };
114
115 return temp;
116 },
117
118 // 复制到剪切板
119 "copy": function (text) {
120
121 let el = this.appendTo(document.body, '<textarea>' + text + '</textarea>');
122
123 // 执行复制
124 el.select();
125 try {
126 let result = window.document.execCommand("copy", false, null);
127
128 if (result) {
129 // console.log('已经复制到剪切板!');
130 } else {
131 // console.log('复制到剪切板失败!');
132 }
133 } catch (e) {
134 console.error(e);
135 // console.log('复制到剪切板失败!');
136 }
137
138 document.body.removeChild(el);
139
140 }
141
142};
\No newline at end of file