diff --git a/src/canvas/helper.ts b/src/canvas/helper.ts index ec6cb721e..068608f79 100644 --- a/src/canvas/helper.ts +++ b/src/canvas/helper.ts @@ -4,6 +4,11 @@ import { GradientObject } from '../graphic/Gradient'; import { RectLike } from '../core/BoundingRect'; import Path from '../graphic/Path'; +function isSafeNum(num: number) { + // NaN、Infinity、undefined、'xx' + return isFinite(num); +} + export function createLinearGradient( this: void, ctx: CanvasRenderingContext2D, @@ -23,10 +28,10 @@ export function createLinearGradient( } // Fix NaN when rect is Infinity - x = isNaN(x) ? 0 : x; - x2 = isNaN(x2) ? 1 : x2; - y = isNaN(y) ? 0 : y; - y2 = isNaN(y2) ? 0 : y2; + x = isSafeNum(x) ? x : 0; + x2 = isSafeNum(x2) ? x2 : 1; + y = isSafeNum(y) ? y : 0; + y2 = isSafeNum(y2) ? y2 : 0; const canvasGradient = ctx.createLinearGradient(x, y, x2, y2); @@ -46,12 +51,17 @@ export function createRadialGradient( let x = obj.x == null ? 0.5 : obj.x; let y = obj.y == null ? 0.5 : obj.y; let r = obj.r == null ? 0.5 : obj.r; + if (!obj.global) { x = x * width + rect.x; y = y * height + rect.y; r = r * min; } + x = isSafeNum(x) ? x : 0.5; + y = isSafeNum(y) ? y : 0.5; + r = r >= 0 && isSafeNum(r) ? r : 0.5; + const canvasGradient = ctx.createRadialGradient(x, y, 0, x, y, r); return canvasGradient; diff --git a/src/graphic/helper/image.ts b/src/graphic/helper/image.ts index aa2bd37ba..858964056 100644 --- a/src/graphic/helper/image.ts +++ b/src/graphic/helper/image.ts @@ -65,7 +65,7 @@ export function createOrUpdateImage( !isImageReady(image) && cachedImgObj.pending.push(pendingWrap); } else { - const image = platformApi.loadImage( + image = platformApi.loadImage( newImageOrSrc, imageOnLoad, imageOnLoad ); (image as any).__zrImageSrc = newImageOrSrc; diff --git a/test/ut/spec/contain/Sector.test.ts b/test/ut/spec/contain/Sector.test.ts index e3b898289..d008a6fd5 100644 --- a/test/ut/spec/contain/Sector.test.ts +++ b/test/ut/spec/contain/Sector.test.ts @@ -12,7 +12,6 @@ describe('Path', function () { cy: 625.5, startAngle: -1.5707963267948966, endAngle: 4.71238898038469, - innerCornerRadius: 5, r: 218.92499999999998, r0: 93.825 },