UNPKG

@hzy1123581324/z-view-ui

Version:

z-view-ui是使用vue3开发的组件,开发中,有部分组件功能未实现,慎用

178 lines (156 loc) 4.68 kB
// 性能优化优化 /** * @description 防抖 一段时间内只执行一次 * @param {Function} fn * @param {Number} delay * @return {Function} */ export function debounce(fn,delay = 500) { let timeout = null; // 创建一个标记用来存放定时器的返回值 return (res)=> { clearTimeout(timeout); //清除定时器 //创建新的 setTimeout timeout = setTimeout(()=>{ fn(res); }, delay); }; } /** * @description 防抖 先执行一次,一段时间后再只执行一次 * @param {Function} fn * @param {Number} delay * @return {Function} */ export function doDebounce(fn,delay = 500) { let timeout = null; // 创建一个标记用来存放定时器的返回值 return (res)=> { if(!timeout){ // console.log('99999999'); fn(res); } clearTimeout(timeout); //清除定时器 //创建新的 setTimeout timeout = setTimeout(()=>{ timeout = null; fn(res); }, delay); }; } /** * @description 节流 先执行一次,每隔一段时间执行一次 * @param {Function} fn * @param {Number} delay * @return {Function} */ export function doThrottle(fn, delay=500) { let num = 0; let last = new Date().getTime(); // console.log('999999999999++++'); return (res)=> { // console.log('--------------++++'); // console.log(canRun,'7777777777777'); if(num==0|| (last + delay * 10 < new Date().getTime()) ){ num = 1; last = new Date().getTime(); fn(res); } if (last >= new Date().getTime() - delay ) return;//立刻返回 num++; last = new Date().getTime(); setTimeout(()=> { fn(res); }, delay); }; } /** * @description 节流 每隔一段时间执行一次 * @param {Function} fn * @param {Number} delay * @return {Function} */ export function throttle(fn, delay=500) { let canRun = true;//通过闭包保存该变量 // console.log('999999999999++++'); return (res)=> { // console.log('--------------++++'); // console.log(canRun,'7777777777777'); if (!canRun) return;//立刻返回 canRun = false; setTimeout(()=> { fn(res); canRun = true; }, delay); }; } /// 推迟执行 /* * @dev 用于延迟执行 * @param {Number} time 延时的时间 * @param {Boolean} done 传递的参数 * @return {Function} Promised对象 */ export function defer(time = 0, done = "") { // console.log(time); // console.log('%%%%%%%%%%') /// 如果延迟时间小于等于0,直接执行 if(Number(time.toString())<=0){ // console.log('-------'); return Promise.resolve(true); } return new Promise((resolve)=> { setTimeout(resolve, time, done); /* === === == 》定时结束,*/ }) }; // timeout(1000, '红灯亮了').then(function(value) { // console.log(value); // // return new Promise(function(resolve){ // // setTimeout(resolve,1000,'绿灯亮了'); // return timeout(1000, '绿灯亮了') // }) // .then(function(value) { // console.log(value); // // return new Promise(function(resolve){ // // setTimeout(resolve,1000,'蓝灯亮了'); // return timeout(1000, '蓝灯亮了') // }) // .then(function(value) { // console.log(value); // // // }) // console.log("a"); // var p = new Promise(function(resolve) { // console.log("b"); // resolve(); // }); // console.log("c"); // p.then(function() { // console.log("d"); // }); //依次打印 a -> b -> c -> e -> d //快速排序 export function quickSort(arr) { //如果数组的个数小于等于1,就返回该数组 if (arr.length <= 1) { return arr; } else { //否则,取得该数组的中间位置,保存在变量c中 let c = Math.floor(arr.length / 2); //将变量c位置的值取出来存入变量center中 let center = arr.splice(c, 1)[0]; //声明两个空数组left、right let left = []; let right = []; //然后遍历arr数组将每个数与center做比较,大的放在right中,小的放在left中 for (let i = 0; i < arr.length; i++) { if (arr[i] <= center) { left.push(arr[i]); } else { right.push(arr[i]); } } //最后返回左边和右边的数组,并对其做相同操作,直到递归完成 // return quickSort(left).concat(center).concat(quickSort(right)); return [...quickSort(left), ...quickSort(center), ...quickSort(right)] } }