微信公众号前端模版
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.8 KiB

// 文件加载工具
/**
* js加载
* @param src 文件路径
* @returns {Promise<>}
*/
export function jsLoading(src) {
return new Promise((resolve, reject) => {
try {
let head = document.getElementsByTagName('head')[0]
let script = document.createElement('script')
script.type = 'text/javascript'
script.src = src + '?t=' + new Date().getTime()
script.onload = script.onreadystatechange = () => {
console.log(`[${script.src}] script load ok`)
resolve()
}
head.appendChild(script)
} catch (e) {
console.error(e)
reject()
}
})
}
/**
* css文件加载
* @param path 文件路径
* @returns {Promise<>}
*/
export function cssLoading(path) {
return new Promise((resolve, reject) => {
try {
let head = document.getElementsByTagName('head')[0]
let css = document.createElement('link')
css.rel = 'stylesheet'
css.type = 'text/css'
css.href = path + '?t=' + new Date().getTime()
css.onload = css.onreadystatechange = () => {
console.log(`[${css.href}] css load ok`)
resolve()
}
head.appendChild(css)
} catch (e) {
console.error(e)
reject()
}
})
}
/**
* css文件加载
* @param path 文件路径
* @returns {Promise<>}
*/
export function lessLoading(path) {
return new Promise((resolve, reject) => {
try {
let head = document.getElementsByTagName('head')[0]
let css = document.createElement('link')
css.rel = 'stylesheet/less'
css.type = 'text/css'
css.href = path + '?t=' + new Date().getTime()
css.onload = css.onreadystatechange = () => {
console.log(`[${path}] css load ok`)
resolve()
}
head.appendChild(css)
} catch (e) {
console.error(e)
reject()
}
})
}
/**
* html代码压缩
* @param htmlStr
* @returns {string}
*/
export function htmlCompress(htmlStr) {
// 字符串转换成文档类型
let domParser = new DOMParser()
let doc = domParser.parseFromString(htmlStr, 'text/html')
// 使用原生的TreeWalker进行遍历
let treeWalker = document.createTreeWalker(doc)
let arrNodeRemove = []
// 遍历注释节点和换行文本节点
while (treeWalker.nextNode()) {
let node = treeWalker.currentNode
if (node.nodeType === Node.COMMENT_NODE || (node.nodeType === Node.TEXT_NODE && node.nodeValue.trim() === '')) {
arrNodeRemove.push(node)
}
}
// 节点移除
arrNodeRemove.forEach(function (node) {
node.parentNode.removeChild(node)
})
return doc.body.innerHTML
}
export default Object.freeze(window.FileUtil = {
jsLoading,
cssLoading,
lessLoading,
htmlCompress
})