UNPKG

jparticles

Version:

A lightweight, efficient and easy-to-use Canvas library for building some cool particle effects.

75 lines (74 loc) 2.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.loadImage = exports.merge = void 0; var checking_1 = require("./checking"); /** * 深拷贝,浅拷贝请使用 Object.assign 或 ECMAScript 扩展运算符 * 1、API 参考 jQuery 深拷贝 https://api.jquery.com/jQuery.extend/#jQuery-extend-deep-target-object1-objectN * 2、数组合并采用替换方式,如 * merge({ a: [1, 2, 3] }, { a: [9, 8] }) => { a: [9, 8, 3] } */ // eslint-disable-next-line @typescript-eslint/no-explicit-any function merge() { var objects = []; for (var _i = 0; _i < arguments.length; _i++) { objects[_i] = arguments[_i]; } var length = objects.length; var target = objects[0] || {}; for (var i = 0; i < length; i++) { for (var prop in objects[i]) { var value = objects[i][prop]; var copyIsArray = Array.isArray(value); if (copyIsArray || checking_1.isPlainObject(value)) { var src = target[prop]; if (copyIsArray) { src = Array.isArray(src) ? src : []; } else { src = checking_1.isPlainObject(src) ? src : {}; } target[prop] = merge(src, value); } else { target[prop] = value; } } } return target; } exports.merge = merge; /** * 加载图像 * - 缓存机制 * - 错误重试机制 * * @param url 图像地址 * @param successCallback 加载成功的回调函数 * @param errorCallback 加载失败的回调函数 */ function loadImage(url, successCallback, errorCallback) { if (loadImage.cachedImages[url]) { successCallback(loadImage.cachedImages[url]); return; } var times = 0; (function request() { var image = new Image(); image.addEventListener('load', function () { loadImage.cachedImages[url] = image; successCallback(image); }); image.addEventListener('error', function (e) { times++; errorCallback === null || errorCallback === void 0 ? void 0 : errorCallback(e, times); if (times <= 3) { request(); } }); image.crossOrigin = 'Anonymous'; image.src = url; })(); } exports.loadImage = loadImage; loadImage.cachedImages = {};