douyin/src/utils/dom.js
2023-01-20 03:01:50 +08:00

153 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import globalMethods from './index'
export default class Dom {
els = []
constructor(arg) {
if (typeof arg === 'string') {
return this.find(arg)
}
if (typeof arg === 'object') {
this.els.push(arg)
}
if (typeof arg === 'function') {
document.addEventListener("DOMContentLoaded", arg);
}
return this
}
addClass(class1) {
if (typeof class1 === 'string') {
this.els.forEach(el => {
el.classList.add(class1)
})
} else {
this.els.forEach(el => {
el.classList.add(...class1)
})
}
return this
}
replaceClass(class1, class2) {
this.els.forEach(el => {
el.classList.replace(class1, class2)
})
return this
}
find(tag) {
let els = []
if (this.els.length) {
els = this.els[0].querySelectorAll(tag)
} else {
els = document.querySelectorAll(tag)
}
if (els.length) {
this.els = els
}
return this
}
create(template) {
let tempNode = document.createElement('div');
tempNode.innerHTML = template.trim();
this.els = [tempNode.firstChild]
return this;
}
append(that) {
this.els.forEach(el => {
that.els.forEach(v => {
el.appendChild(v)
})
})
return this
}
remove() {
this.els.forEach(el => {
el.parentNode.removeChild(el)
})
return this
}
attr(...args) {
if (args.length === 1) {
return this.els[0][args[0]]
}
}
css(...args) {
if (args.length === 1) {
//情况一:获取样式
if (typeof args[0] === 'string') {
return window.getComputedStyle(this.els[this.els.length - 1], null)[args[0]]
// return globalMethods.$getCss2
// return this.els[0].style[args[0]]
} else {
//情况三:设置多个样式
Object.keys(args[0]).map(key => {
this.els.forEach(el => {
el.style[key] = this.getStyleValue(key, args[0][key])
})
}
)
}
} else {
//情况二设置一对css样式
this.els.forEach(el => {
el.style[args[0]] = this.getStyleValue(args[0], args[1])
})
}
return this
}
on(eventName, fn) {
let eventArray = eventName.split(" ");
this.els.forEach(el => {
eventArray.map(event => {
el.addEventListener(event, fn);
})
})
return this;
}
trigger(eventName) {
let eventArray = eventName.split(" ");
this.els.forEach(el => {
eventArray.map(event => {
el.dispatchEvent(new Event(event));
})
})
return this;
}
getWidth() {
return this.els[0].getBoundingClientRect().width
}
getHeight() {
return this.els[0].getBoundingClientRect().height
}
getStyleValue(key, value) {
let whiteList = [
'top',
'left',
'right',
'bottom',
]
if (whiteList.find(v => v === key)) {
if (typeof value === 'number') {
return value + 'px'
}
}
return value
}
removePx(val) {
return parseInt(val)
}
}