@@ -353,7 +353,13 @@ function JSScrollTextChartContainer(uielement)
353353
354354 if ( option )
355355 {
356-
356+ if ( IFrameSplitOperator . IsNumber ( option . LimitCount ) ) chart . LimitCount = option . LimitCount ;
357+ if ( option . Label )
358+ {
359+ var item = option . Label ;
360+ if ( IFrameSplitOperator . IsString ( item . Text ) ) chart . Label . Text = item . Text ;
361+ if ( IFrameSplitOperator . IsBool ( item . IsShow ) ) chart . Label . IsShow = item . IsShow ;
362+ }
357363 }
358364
359365 this . UIElement . onmousedown = ( e ) => { this . UIOnMouseDown ( e ) ; }
@@ -663,6 +669,15 @@ function ChartScrollText()
663669 this . FirstItem = null ; //第一个显示的项
664670 this . MouseOnItem = null ; //鼠标所在项
665671
672+ this . LimitCount = 15 ; //最多存几条数据
673+ this . LabelConfig =
674+ {
675+ Color :g_JSChartResource . ScrollText . Label . Color ,
676+ Font :g_JSChartResource . ScrollText . Label . Font ,
677+ Margin :CloneData ( g_JSChartResource . ScrollText . Label . Margin )
678+ } ;
679+ this . Label = { Text :"24H滚动新闻" , Width :null , IsShow :true } ;
680+
666681 this . AryRect = [ ] ;
667682
668683 this . TextConfig =
@@ -683,12 +698,17 @@ function ChartScrollText()
683698 {
684699 this . TextConfig . Font = g_JSChartResource . ScrollText . Font ;
685700 this . TextConfig . Color = g_JSChartResource . ScrollText . Color ;
701+ this . TextConfig . MouseOnColor = g_JSChartResource . ScrollText . MouseOnColor ;
686702 this . TextConfig . Spacing = g_JSChartResource . ScrollText . Spacing ;
687703 this . TextConfig . Margin . Top = g_JSChartResource . ScrollText . Margin . Top ;
688704 this . TextConfig . Margin . Bottom = g_JSChartResource . ScrollText . Margin . Bottom ;
689705
690706 this . LeftMargin = g_JSChartResource . ScrollText . LeftMargin ; //左边间距
691707 this . RightMargin = g_JSChartResource . ScrollText . RightMargin ; //右边间距
708+
709+ this . LabelConfig . Color = g_JSChartResource . ScrollText . Label . Color ;
710+ this . LabelConfig . Font = g_JSChartResource . ScrollText . Label . Font ;
711+ this . LabelConfig . Margin = CloneData ( g_JSChartResource . ScrollText . Label . Margin ) ;
692712 }
693713
694714 this . GetDataIndex = function ( finderItem )
@@ -723,8 +743,9 @@ function ChartScrollText()
723743
724744 this . GetClientRect = function ( )
725745 {
746+ var labelWidth = this . GetLabelWidth ( ) ;
726747 var border = this . ChartBorder . GetBorder ( ) ;
727- var rtClient = { Left :border . Left , Right :border . Right , Top :border . Top , Bottom :border . Bottom } ;
748+ var rtClient = { Left :border . Left + labelWidth , Right :border . Right , Top :border . Top , Bottom :border . Bottom } ;
728749 rtClient . Left += this . LeftMargin ;
729750 rtClient . Right -= this . RightMargin ;
730751 rtClient . Width = rtClient . Right - rtClient . Left ;
@@ -733,9 +754,52 @@ function ChartScrollText()
733754 return rtClient ;
734755 }
735756
757+ this . DrawLabel = function ( )
758+ {
759+ if ( ! this . Label || ! this . Label . IsShow || ! this . Label . Text ) return ;
760+
761+ var config = this . LabelConfig ;
762+ this . Canvas . textBaseline = "bottom" ;
763+ this . Canvas . textAlign = "left" ;
764+ this . Canvas . font = config . Font ;
765+ this . Canvas . fillStyle = config . Color ;
766+
767+ var border = this . ChartBorder . GetBorder ( ) ;
768+ var text = this . Label . Text ;
769+ var textWidth = this . Canvas . measureText ( text ) . width ;
770+ var cellWidth = textWidth + config . Margin . Left + config . Margin . Right ;
771+ var x = border . Left + config . Margin . Left ;
772+ var yText = border . Bottom - config . Margin . Bottom ;
773+ this . Canvas . fillText ( text , x , yText ) ;
774+ this . Label . Width = cellWidth ;
775+
776+ this . Canvas . strokeStyle = g_JSChartResource . StatusBar . BorderColor ; //边框线
777+ this . Canvas . beginPath ( ) ;
778+ var y = ToFixedPoint ( border . Left + cellWidth ) ;
779+ this . Canvas . moveTo ( y , border . Top ) ;
780+ this . Canvas . lineTo ( y , border . Bottom ) ;
781+ this . Canvas . stroke ( ) ;
782+ }
783+
784+ this . GetLabelWidth = function ( )
785+ {
786+ if ( ! this . Label || ! this . Label . IsShow || ! this . Label . Text ) return 0 ;
787+ if ( IFrameSplitOperator . IsNumber ( this . Label . Width ) ) return this . Label . Width ;
788+
789+ var config = this . LabelConfig ;
790+ var text = this . Label . Text ;
791+ var textWidth = this . Canvas . measureText ( text ) . width ;
792+ var cellWidth = textWidth + config . Margin . Left + config . Margin . Right ;
793+ this . Label . Width = cellWidth ;
794+
795+ return cellWidth ;
796+ }
797+
736798 this . Draw = function ( )
737799 {
738800 this . AryRect = [ ] ;
801+ this . DrawLabel ( ) ;
802+
739803 if ( ! this . Data || ! IFrameSplitOperator . IsNonEmptyArray ( this . Data . AryText ) ) return ;
740804
741805 var rtClient = this . GetClientRect ( ) ;
@@ -750,19 +814,20 @@ function ChartScrollText()
750814 var config = this . TextConfig ;
751815
752816 var y = rtClient . Bottom ;
753- var x = rtClient . Left ;
754- var startIndex = - 1 ;
817+ var x = rtClient . Right ;
818+ var startIndex = - 1 , endIndex = - 1 ;
755819 if ( this . FirstItem ) startIndex = this . GetDataIndex ( this . FirstItem ) ;
756820 if ( startIndex < 0 )
757821 {
758- this . FirstItem = this . Data . AryText [ 0 ] ;
759- this . FirstItem . Move = { XOffset :0 }
760- startIndex = 0 ;
822+ var index = this . Data . AryText . length - 1 ;
823+ this . FirstItem = this . Data . AryText [ index ] ;
824+ this . FirstItem . Move = { XOffset :0 } ;
825+ startIndex = index ;
761826 }
762827
763828 if ( this . FirstItem . Move && IFrameSplitOperator . IsNumber ( this . FirstItem . Move . XOffset ) ) x -= this . FirstItem . Move . XOffset ;
764829
765- for ( var i = startIndex ; i < this . Data . AryText . length ; ++ i )
830+ for ( var i = startIndex ; i >= 0 ; -- i )
766831 {
767832 var item = this . Data . AryText [ i ] ;
768833 if ( ! IFrameSplitOperator . IsNonEmptyArray ( item . Content ) ) continue ;
@@ -794,19 +859,22 @@ function ChartScrollText()
794859 itemWidth += textWidth
795860 }
796861
862+ endIndex = i ;
863+
797864 rtText . Right = x ;
798865 this . AryRect . push ( { Rect :rtText , Data :item } ) ;
799866 x += config . Spacing ;
800867
801- if ( x >= rtClient . Right ) break ;
802-
803868 if ( item == this . FirstItem )
804869 {
805870 item . Move . ContentWidth = itemWidth ;
806871 item . Move . Width = itemWidth + config . Spacing ;
807872 }
873+
874+ if ( x >= rtClient . Right ) break ;
808875 }
809876
877+ /*
810878 for(var i=0;i<this.Data.AryText.length;++i)
811879 {
812880 if (x>=rtClient.Right) break;
@@ -845,21 +913,43 @@ function ChartScrollText()
845913
846914 x+=config.Spacing;
847915 }
916+ */
848917
849918 this . Canvas . restore ( ) ;
919+
920+ this . ResizeDataCount ( endIndex ) ;
921+ }
922+
923+ this . ResizeDataCount = function ( startIndex )
924+ {
925+ if ( ! IFrameSplitOperator . IsNumber ( startIndex ) ) return ;
926+ if ( startIndex <= 0 ) return ;
927+ if ( this . LimitCount <= 0 ) return ;
928+ if ( ! this . Data || ! IFrameSplitOperator . IsNonEmptyArray ( this . Data . AryText ) ) return ;
929+ if ( this . Data . AryText . length <= this . LimitCount ) return ;
930+
931+ var delCount = this . Data . AryText . length - this . LimitCount ;
932+ for ( var i = 0 ; i < delCount && i < startIndex ; ++ i )
933+ {
934+ this . Data . AryText . shift ( ) ;
935+ }
850936 }
851937
852938 this . GetTooltipData = function ( x , y , tooltip )
853939 {
854- for ( var i = 0 ; i < this . AryRect . length ; ++ i )
940+ var rtClient = this . GetClientRect ( ) ;
941+ if ( x >= rtClient . Left && x <= rtClient . Right )
855942 {
856- var item = this . AryRect [ i ] ;
857- if ( Path2DHelper . PtInRect ( x , y , item . Rect ) )
943+ for ( var i = 0 ; i < this . AryRect . length ; ++ i )
858944 {
859- tooltip . Data = item ;
860- tooltip . ChartPaint = this ;
861- tooltip . Type = 1 ;
862- return true ;
945+ var item = this . AryRect [ i ] ;
946+ if ( Path2DHelper . PtInRect ( x , y , item . Rect ) )
947+ {
948+ tooltip . Data = item ;
949+ tooltip . ChartPaint = this ;
950+ tooltip . Type = 1 ;
951+ return true ;
952+ }
863953 }
864954 }
865955
@@ -872,14 +962,26 @@ function ChartScrollText()
872962 if ( ! this . FirstItem ) return false ;
873963 if ( this . MouseOnItem ) return true ;
874964
965+ var rtClient = this . GetClientRect ( ) ;
966+ var left = rtClient . Left ;
967+ var right = rtClient . Right ;
875968 var width = this . FirstItem . Move . Width ;
876969 var xOffset = this . FirstItem . Move . XOffset + this . MoveStep ;
877- if ( xOffset >= width )
970+ if ( right - xOffset + width < left )
878971 {
879972 var startIndex = this . GetDataIndex ( this . FirstItem ) ;
880- var nextIndex = ( startIndex + 1 ) % this . Data . AryText . length ;
881- this . FirstItem = this . Data . AryText [ nextIndex ] ;
882- this . FirstItem . Move = { XOffset :xOffset - width }
973+ nextIndex = startIndex - 1 ;
974+ if ( nextIndex < 0 )
975+ {
976+ var index = this . Data . AryText . length - 1 ;
977+ this . FirstItem = this . Data . AryText [ index ] ;
978+ this . FirstItem . Move = { XOffset :0 } ;
979+ }
980+ else
981+ {
982+ this . FirstItem = this . Data . AryText [ nextIndex ] ;
983+ this . FirstItem . Move = { XOffset :xOffset - width }
984+ }
883985 }
884986 else
885987 {
0 commit comments