UNPKG

crypto_net

Version:

some useful functions

72 lines (67 loc) 2.62 kB
function preLoadScript(src){ window.addEventListener('DOMContentLoaded',()=>{ const script=document.createElement('script'); script.src=src; script.async=true; document.head.appendChild(script); }) } //options为其他对link标签属性的定制 function prefetchAsset(src, {crossOrigin}){ window.requestIdleCallback(()=>{ const link=document.createElement('link'); link.href=src; link.rel='prefetch'; const url=new URL(src,import.meta.url) console.log(url.host); if(url.host!==document.location.host){ link.crossOrigin=crossOrigin||'use-credentials'; } const ext=src.split('.').pop() switch (ext){ case 'css': link.as='style'; break; case 'png'||'jpeg'||'webp'||'png': link.as='image' break; default: link.as='fetch' } document.head.appendChild(link) }) } //不管布局,只预加载看到的,懒加载未显示的,rows,cols,srcArray,rowHeight //滚动加载 function scrollLoad(containerSelector,offset,delay,options){ return new Promise((resolve,reject)=>{ const container=document.querySelector(containerSelector); function debounce(fn){ let timer=null; return function (){ clearTimeout(timer); timer=setTimeout(fn,delay) } } function throttle(fn,delay){ let timer=null; return function (){ const thisArg=this; const args=arguments; if(!timer){ timer=setTimeout(()=> { timer=null fn.apply(thisArg, args) },delay) } } } container.addEventListener('scroll',debounce(function (){ const {scrollTop,offsetHeight,scrollHeight}=div; if(scrollTop+offsetHeight>scrollHeight-offset){ resolve(true) } })) }) } export {prefetchAsset,preLoadScript,scrollLoad}