Flex LineChart series click事件

本文介绍了一个使用Flex框架实现的LineChart组件案例,通过点击事件获取所选数据点的具体信息。该示例展示了如何定义LineChart的数据源、设置不同类型的线条样式,并通过事件监听器来响应用户的点击行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


LineChart series click 事件

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
	xmlns:fx="http://ns.adobe.com/mxml/2009" 
	xmlns:s="library://ns.adobe.com/flex/spark" 
	xmlns:mx="library://ns.adobe.com/flex/mx">
	 
	<fx:Script>
        <![CDATA[

        import mx.charts.HitData;
        import mx.charts.events.ChartItemEvent;
        import mx.collections.ArrayCollection;
        import mx.controls.Alert;
			
        [Bindable]
        private var expensesAC:ArrayCollection = new ArrayCollection( [
            { Month: "1", Profit: 1, Expenses: 6, Amount: 3 },
            { Month: "11", Profit: 2, Expenses: 5, Amount: 4 },
            { Month: "111", Profit: 10, Expenses: 10, Amount: 5 },
            { Month: "1111", Profit: 4, Expenses: 3, Amount: 6 },
            { Month: "1111", Profit: 5, Expenses: 2, Amount: 7 } ]);
			
			
			
			protected function clickHandler(event:ChartItemEvent):void
			{
				//获取linechart的id
				var linename:Object = event.currentTarget;
				
				var hd:HitData = event.hitData;
				
				//获取点击点的index
				var index:Number = hd.chartItem.index;
				
				//获取lineseries的信息
				if (hd.chartItem.element is LineSeries)
				{
					var displayName:String = LineSeries(hd.chartItem.element).displayName;
					if(displayName == "Profit"){
						trace(displayName+':'+ linename.dataProvider[index].Profit);
					}
					if(displayName == "Expenses"){
						trace(displayName+':'+ linename.dataProvider[index].Expenses);
					}
					if(displayName == "Amount"){
						trace(displayName+':'+ linename.dataProvider[index].Amount);
					}
				}
				/*if (hd.chartItem.element is AreaSeries)
				{
					var displayName:String = AreaSeries(hd.chartItem.element).displayName;
				}*/	
			}
			
		]]>
    </fx:Script>

	<fx:Declarations>

		<!-- Define custom Strokes. -->
		<s:SolidColorStroke id = "s1" color="blue" weight="1"/>
		<s:SolidColorStroke id = "s2" color="red" weight="1"/>
		<s:SolidColorStroke id = "s3" color="green" weight="1"/>

	</fx:Declarations>
	

    <mx:Panel title="曲线" 
        height="100%" width="100%" layout="horizontal">

		<mx:LineChart id="linechart1" height="30%" width="30%"
            paddingLeft="5" paddingRight="5" 
            showDataTips="true" dataProvider="{expensesAC}" itemClick="clickHandler(event)">
                
            <mx:horizontalAxis>
                <mx:CategoryAxis categoryField="Month"/>
            </mx:horizontalAxis>

            <mx:series><!--curve:曲线  segment:折线  horizontal:水平线  step:  reverseStep:-->
                <mx:LineSeries yField="Profit" form="horizontal" displayName="Profit" lineStroke="{s1}"/>
                <mx:LineSeries yField="Expenses" form="segment" displayName="Expenses" lineStroke="{s2}"/>
                <mx:LineSeries yField="Amount" form="curve" displayName="Amount" lineStroke="{s3}"/>
            </mx:series>
        </mx:LineChart>

		<mx:Legend dataProvider="{linechart1}"/><!--图表元素-->
    </mx:Panel>

</s:Application>


界面效果:



Flex Builder dubgger:





<template> <view class="container"> <canvas canvas-id="gaugeCanvas" id="gaugeCanvas" class="charts" @touchstart="touchGauge" ></canvas> </view> </template> <script> import uCharts from '@qiun/ucharts'; export default { data() { return { gaugeChart: null, gaugeData: { categories: [{ value: 0.2, color: '#ff0000' }, { value: 0.8, color: '#00ff00' }], series: [{ name: '完成率', data: 75 // 仪表盘指针位置(0-100) }] } }; }, mounted() { this.drawGauge(); }, methods: { // 绘制仪表盘 drawGauge() { const canvasContext = uni.createCanvasContext('gaugeCanvas', this); this.gaugeChart = new uCharts({ context: canvasContext, canvasId: 'gaugeCanvas', type: 'gauge', width: uni.upx2px(750), height: uni.upx2px(500), dataLabel: true, dataPointShape: true, extra: { gauge: { // 仪表盘配置 startAngle: 0.75, // 起始角度 endAngle: 0.25, // 结束角度 gaugePosition: 'center', radius: 120, gaugeLabel: { fontSize: 14, color: '#666' }, gaugeUnit: { show: true, text: '%', color: '#333' } } }, categories: this.gaugeData.categories, series: this.gaugeData.series }); this.gaugeChart.draw(); }, // 触摸交互事件 touchGauge(e) { this.gaugeChart.touchLegend(e); this.gaugeChart.showToolTip(e); } } }; </script> <style> .container { padding: 20rpx; } .charts { width: 750rpx; height: 500rpx; } </style>这是自己创建的component/gauge目录下的gaugeuchart.vue文件,<template> <view class="content"> <image class="logo" src="/static/logo.png"></image> <view class="text-area"> <text class="title">{{title}}</text> </view> <view class="text-area"> <text class="title">温度:{{temp}}</text> </view> <view class="text-area"> <text class="title">湿度:{{humi}}</text> </view> <view class="uni-list"> <view class="uni-list-cell uni-list-cell-pd"> <view class="uni-list-cell-db">开启中</view> <switch @change="SetDHT11Data" checked /> </view> </view> </view> </template> <script> const {createCommonToken} = require('@/static/JS/key.js'); export default { data() { return { title: '智慧农业', temp: '0', humi: '0', toekn:'', author_key:'eW9ytDbAl5938mv3tcbQYKshM5TgSB8f6IrUe7Q3M2gzdyYFzVErWZ/Sn0TlTTeZ', version:'2022-05-01', user_id:'449813' } }, onLoad() { this.gettoken(); console.log(this.token); this.getDHTdata(); }, methods: { gettoken(){ const params={ author_key:this.author_key, version:this.version, user_id:this.user_id } this.token=createCommonToken(params); }, getDHTdata(){ uni.request({ url:'https://iot-api.heclouds.com/thingmodel/query-device-property',//请求的url method:'GET',//请求方式 header:{ 'authorization':this.token }, data:{ product_id:'GvyD8vzX31', device_name:'DHT11' }, success:(res) => { console.log(res); if(res.data.code==0) { var arr=res.data.data; for(var i=0;i<arr.length;i++) { if(arr[i].identifier=='humi') { this.humi=arr[i].value; } if(arr[i].identifier=='temp') { this.temp=arr[i].value; } } } }, fail:(err) =>{ console.error('请求失败:',err); } }); }, SetDHT11Data(event){ //console.log('按钮状态改变'); //console.log(event); var value=event.detail.value; uni.request({ url:'https://iot-api.heclouds.com/thingmodel/set-device-property',//请求的url method:'POST',//请求方式 header:{ 'authorization':this.token }, data:{ product_id:'GvyD8vzX31', device_name:'DHT11', params:{ led : value } }, success:(res) => { console.log(res); }, fail:(err) =>{ console.error('请求失败:',err); } }); } } } </script> <style> .content { display: flex; flex-direction: column; align-items: center; justify-content: center; } .logo { height: 200rpx; width: 200rpx; margin-top: 200rpx; margin-left: auto; margin-right: auto; margin-bottom: 50rpx; } .text-area { display: flex; justify-content: center; } .title { font-size: 36rpx; color: #8f8f94; } </style> 这是index文件,给予这两个文件,实现仪表盘,显示实时数据和折线图
最新发布
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值