@zhsz/cool-design-dv
Version:
73 lines (72 loc) • 2.21 kB
JavaScript
import { cloneDeep as cloneDeep$1 } from "lodash-es";
const raFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || function(callback) {
return window.setTimeout(callback, 1e3 / 60);
};
const requestAnimationFrame = raFrame;
const cancelAnimationFrame = window.cancelAnimationFrame || window.webkitRequestAnimationFrame || function(id) {
window.clearTimeout(id);
};
function debounce(fn, delay = 20, isImmediate = false, context = this) {
let timer;
return function() {
const _args = [].slice.call(arguments);
clearTimeout(timer);
const _fn = function() {
timer = null;
if (!isImmediate)
fn.apply(context, _args);
};
const callNow = !timer && isImmediate;
timer = setTimeout(_fn, delay);
if (callNow)
fn.apply(context, _args);
};
}
function uid() {
const rnd = Math.floor(Math.random() * 1e3);
const timestamp = (/* @__PURE__ */ new Date()).getTime();
return [timestamp, rnd].join("");
}
function cloneDeep(value) {
return cloneDeep$1(value);
}
function mulAdd(nums) {
nums = filterNonNumber(nums);
return nums.reduce((all, num) => all + num, 0);
}
function filterNonNumber(array) {
return array.filter((n) => typeof n === "number");
}
function getTwoPointDistance(pointOne, pointTwo) {
const minusX = Math.abs(pointOne[0] - pointTwo[0]);
const minusY = Math.abs(pointOne[1] - pointTwo[1]);
return Math.sqrt(minusX * minusX + minusY * minusY);
}
function getPolylineLength(points) {
const lineSegments = new Array(points.length - 1).fill(0).map((foo, i) => [points[i], points[i + 1]]);
const lengths = lineSegments.map((item) => getTwoPointDistance(...item));
return mulAdd(lengths);
}
function random(min, max) {
if (arguments.length === 1) {
return Math.floor(Math.random() * min + 1);
} else {
return Math.floor(Math.random() * (max - min + 1) + min);
}
}
function getCircleRadianPoint(x, y, radius, radian) {
return [x + Math.cos(radian) * radius, y + Math.sin(radian) * radius];
}
export {
cancelAnimationFrame,
cloneDeep,
debounce,
filterNonNumber,
getCircleRadianPoint,
getPolylineLength,
getTwoPointDistance,
mulAdd,
random,
requestAnimationFrame,
uid
};