wetrade-design
Version:
一款多语言支持Vue3的UI框架
176 lines • 5.2 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
/**
* User: CHT
* Date: 2020/5/8
* Time: 14:03
*/
// 字段key 的 枚举
export var mark = {
relationMark: 'id',
startMark: 'startId',
endMark: 'endId'
};
/**
* @Description: 生成16位随机字符串(可自定义前后缀)
* @param {*} before 前缀
* @param {*} after 后缀
* @return {*}
*/
export function uuid() {
var before = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var after = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
var charsLen = chars.length;
var uuid = [];
var len = 16;
for (var i = 0; i < len; i++) {
uuid[i] = chars[0 | Math.random() * charsLen];
}
return before + uuid.join('') + after;
}
/**
* @Description: 获取元素的偏移量(距离视窗)
* @param {*} evt
* @param {*} target
* @return {*}
*/
export function getOffset(evt) {
var target = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var clientX = evt.clientX,
clientY = evt.clientY,
currentTarget = evt.currentTarget;
var current = target || currentTarget;
var _current$getBoundingC = current.getBoundingClientRect(),
left = _current$getBoundingC.left,
top = _current$getBoundingC.top;
var scrollLeft = target && target.scrollLeft || 0;
var scrollTop = target && target.scrollTop || 0;
return [clientX - left + scrollLeft, clientY - top + scrollTop];
}
/**
* @Description: 判断 传入的对象的clientX, clientY是否在 target中
* @param {*} param1
* @param {*} target
* @return {*}
*/
export function isIntersect(_ref, target) {
var clientX = _ref.clientX,
clientY = _ref.clientY;
var _target$getBoundingCl = target.getBoundingClientRect(),
top = _target$getBoundingCl.top,
right = _target$getBoundingCl.right,
bottom = _target$getBoundingCl.bottom,
left = _target$getBoundingCl.left;
return top < clientY && right > clientX && bottom > clientY && left < clientX;
}
// 向量相加
export function addVector(vectorA, vectorB) {
return [vectorA[0] + vectorB[0], vectorA[1] + vectorB[1]];
}
// 向量乘以常量系数
export function multiply(vector, k) {
return [vector[0] * k, vector[1] * k];
}
export function differ(pointA, pointB) {
return [pointB[0] - pointA[0], pointB[1] - pointA[1]];
}
export function minus(pointA, pointB) {
return [pointA[0] - pointB[0], pointA[1] - pointB[1]];
}
// 向量点积
export function dotProduct(vectorA, vectorB) {
return vectorA[0] * vectorB[0] + vectorA[1] * vectorB[1];
}
// 向量叉乘
export function cross(vectorA, vectorB) {
return vectorA[0] * vectorB[1] - vectorA[1] * vectorB[0];
}
// 向量的单位向量
export function unitVector(vector) {
var m = Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1]);
return [vector[0] / m, vector[1] / m];
}
// 判断向量 x,y 坐标相等
export function equals(vector, target) {
return vector[0] === target[0] && vector[1] === target[1];
}
// 向量夹角
export function angle(vector) {
return Math.round(180 / Math.PI * Math.atan2(vector[1], vector[0])) + 180;
}
// 判断向量是否平行
export function parallel(vectorA, vectorB) {
return vectorA[0] * vectorB[1] - vectorA[1] * vectorB[0] === 0;
}
// 判断 y 轴相等
export function yAxisEqual(vectorA, vectorB) {
return vectorA[1] === vectorB[1];
}
// 判断 x 轴相等
export function xAxisEqual(vectorA, vectorB) {
return vectorA[0] === vectorB[0];
}
/**
* @Description: 将result进行上述向量方法的链式调用计算,最后以`.end`返回对应结果
* @param {*} result
* @return {*}
*/
export function vector(result) {
var handler = {
add: addVector,
multiply: multiply,
differ: differ,
minus: minus,
dotProduct: dotProduct,
cross: cross,
unitVector: unitVector,
equals: equals,
angle: angle,
parallel: parallel
};
var proxyHandler = {};
Object.keys(handler).forEach(function (key) {
Object.defineProperty(proxyHandler, key, {
get: function get() {
return function (val) {
result = handler[key](result, val);
return proxyHandler;
};
}
});
});
Object.defineProperty(proxyHandler, 'end', {
get: function get() {
return result;
}
});
return proxyHandler;
}
export function toRawType(val) {
return Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase();
}
export function isFun(val) {
return toRawType(val) === 'function';
}
export function isBool(val) {
return toRawType(val) === 'boolean';
}
export function isUndef(val) {
return toRawType(val) === 'undefined';
}
export function isString(val) {
return toRawType(val) === 'string';
}
export function isObject(val) {
return toRawType(val) === 'object';
}
export function arrayReplace(arr1, arr2) {
arr1.splice.apply(arr1, [0, arr1.length].concat(_toConsumableArray(arr2)));
}
export function debounce(fn, timestamp) {
var timeout = null;
return function () {
if (timeout) clearTimeout(timeout);
timeout = setTimeout(fn, timestamp);
};
}