diff --git a/src/visual.ts b/src/visual.ts index f3481ed..dc6bdb2 100644 --- a/src/visual.ts +++ b/src/visual.ts @@ -51,6 +51,8 @@ export class Visual implements IVisual { private selectionManager: powerbi.extensibility.ISelectionManager; private innerContainer!: HTMLDivElement; private animationPlaying: boolean = true;//控制动画暂停 + private data:IPicsScrollerData; + private containerSize:number[]; constructor(options: VisualConstructorOptions) { this.container = options.element; this.host=options.host; @@ -73,28 +75,30 @@ export class Visual implements IVisual { this.container.appendChild(this.innerContainer); } public update(options: VisualUpdateOptions) { - let settings = Visual.parseSettings(options && options.dataViews && options.dataViews[0]); - this.settings=settings; - this.initial(); - //处理输入 + let settings = Visual.parseSettings(options && options.dataViews && options.dataViews[0]); let data: IPicsScrollerData = { urls: options.dataViews[0].categorical.categories[0].values }; + let containerSize=[options.viewport.width,options.viewport.height]; + + //处理输入 //feet settings.animation.stepLength=(settings.animation.stepLength>=0&&settings.animation.stepLength<=100)?settings.animation.stepLength:1; let feet = options.viewport.width / 100 * settings.animation.stepLength; //interval settings.animation.interval=settings.animation.interval>0?settings.animation.interval:100; - let interval = this.settings.animation.interval; + let interval = settings.animation.interval; + + //rowGap settings.layout.rowGap=(settings.layout.rowGap>=0&&settings.layout.rowGap<=100)?settings.layout.rowGap:0; let rowGap = options.viewport.height / 100 * settings.layout.rowGap; //columnGap settings.layout.columnGap=(settings.layout.columnGap>=0&&settings.layout.columnGap<=100)?settings.layout.columnGap:0; - let columnGap = options.viewport.width / 100 * this.settings.layout.columnGap; - + let columnGap = options.viewport.width / 100 * settings.layout.columnGap; //rowsCount settings.layout.rowsCount=settings.layout.rowsCount>=1?Math.floor(settings.layout.rowsCount):1; - let rowsCount=this.settings.layout.rowsCount; + let rowsCount=settings.layout.rowsCount; + if (!(data.urls.length > 0) || !(rowsCount! > 0)) { console.info("picsScroller error: (source_url.length,rowsCount) ", data.urls.length + "_" + rowsCount); @@ -103,6 +107,28 @@ export class Visual implements IVisual { if (rowsCount > data.urls.length) { rowsCount = data.urls.length; }; + + console.debug("data",JSON.stringify(data)); + console.debug("this.data",JSON.stringify(this.data)); + console.debug("settings",JSON.stringify(settings)); + console.debug("this.settings",JSON.stringify(this.settings)); + console.debug("containerSize",JSON.stringify(containerSize)); + console.debug("this.containerSize",JSON.stringify(this.containerSize)); + let justifyEqual=function(a:any,b:any){ + return JSON.stringify(a)==JSON.stringify(b); + }; + //判断是否完全无需刷新 + if(justifyEqual(this.data,data)&&justifyEqual(this.settings,settings)&&justifyEqual(this.containerSize,containerSize)){ + return; + } + + //必要的类 + this.initial(); + this.data=data; + this.settings=settings; + this.containerSize=containerSize; + + //数据转换 let brandsCount = data.urls.length; let unitsCountPerRow = Math.floor(brandsCount / rowsCount); let logoUrlsArr: string[][] = [];