ps-tcplayer
Version:
Tencent Cloud Player component with Vue2/Vue3 compatibility
117 lines (112 loc) • 3.37 kB
JavaScript
export function loadResource (sources, cb) {
let arr = [...sources]
if (!arr.length) {
cb && cb()
console.log('resouce loaded')
return false
}
let item = arr.shift()
if (!item) {
loadResource(arr, cb)
return false
}
// 使用正则表达式或URL解析来检测文件类型,兼容带查询参数的URL
const isJsFile = /\.js(\?.*)?$/.test(item);
const isCssFile = /\.css(\?.*)?$/.test(item);
if (isJsFile) {
getJS(item, () => {
loadResource(arr, cb)
})
} else if (isCssFile) {
getCss(item, () => {
loadResource(arr, cb)
})
} else {
console.warn('no suport resource:',item)
loadResource(arr, cb)
}
}
function getJS ( url, callback ) {
if(document.querySelector(`script[src="${url}"]`)) {
console.log(url,':has youle')
callback && callback();
return false
}
var script = document.createElement('script'),
fn = callback || function(){};
script.type = 'text/javascript'
//IE
if(script.readyState){
script.onreadystatechange = function(){
if( script.readyState == 'loaded' || script.readyState == 'complete' ){
script.onreadystatechange = null;
fn();
}else{
script.onreadystatechange = null;
fn();
}
console.log(script.readyState)
};
}else{
//其他浏览器
script.onload = function(){
fn();
};
script.onerror = function(err){
fn();
console.log(err)
};
}
script.src = url;
document.querySelector('body').appendChild(script)
}
function getCss( url, callback ){
if(document.querySelector(`link[href="${url}"]`)){
console.log(url,':has youle')
callback && callback();
return false
}
var css = document.createElement('link'),
fn = callback || function(){};
css.rel = 'stylesheet';
//IE
if(css.readyState){
css.onreadystatechange = function(){
if( css.readyState == 'loaded' || css.readyState == 'complete' ){
css.onreadystatechange = null;
fn();
}else{
css.onreadystatechange = null;
fn();
}
console.log(css.readyState)
};
}else{
//其他浏览器
css.onload = function(){
fn();
};
css.onerror = function(err){
fn();
console.log(err)
};
}
css.href = url;
document.querySelector('head').appendChild(css)
}
export function parseDom (html) {
let ele = document.createElement('div')
ele.innerHTML = html.trim()
return ele.childNodes[0]
}
export function afterinsert(newElement,targetElement){
const parent = targetElement.parentNode; //得到父节点
if (parent.lastChild === targetElement) {
parent.appendChild(newElement);
}else{
parent.insertBefore(newElement,targetElement.nextSibling); //否则,当前节点的下一个节点之前添加
}
}
export function isElement(node) {
return true
}