当前位置: 首页 > news >正文

uniapp中使用echarts并且支持pc端的拖动、拖拽和其他交互事件

npm install echarts -D
​
// "echarts": "^5.3.2", [推荐版本]
// "zrender": "^5.3.2"  [如果报错的话就安装这个]

<template><view class="container"><view id="myChart" class="chart"></view></view>
</template>
​
<script>
import * as echarts from 'echarts/dist/echarts.min.js';
​
// 开启触摸事件支持,用于适配移动端触摸屏设备。
echarts.env.touchEventsSupported = true;
​
// 明确关闭微信小程序适配模式,因为当前是浏览器环境
echarts.env.wxa = false;
​
// 同时启用SVG和Canvas两种渲染模式,ECharts会根据浏览器能力自动选择:
// Canvas更适合大数据量场景
// SVG更适合交互操作和动画
echarts.env.svgSupported = true;
echarts.env.canvasSupported = true;
​
// 启用DOM操作支持,这是浏览器环境下图表渲染的基础能力
echarts.env.domSupported = true;
​
export default {data() {return {chart: null}},
​methods: {initChart() {let base = +new Date(1968, 9, 3);let oneDay = 24 * 3600 * 1000;let date = [];let data = [Math.random() * 300];for (let i = 1; i < 20000; i++) {var now = new Date((base += oneDay));date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'));data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));}
​const option = {tooltip: {trigger: 'axis',position: function (pt) {return [pt[0], '10%'];}},title: {left: 'center',text: 'Large Area Chart'},toolbox: {feature: {dataZoom: {yAxisIndex: 'none'},restore: {},saveAsImage: {}}},xAxis: {type: 'category',boundaryGap: false,data: date},yAxis: {type: 'value',boundaryGap: [0, '100%']},dataZoom: [{type: 'inside',start: 0,end: 10},{type: 'slider',start: 0,end: 10,height: 20,bottom: 10,handleSize: '100%'}],series: [{name: 'Fake Data',type: 'line',symbol: 'none',sampling: 'lttb',itemStyle: {color: 'rgb(255, 70, 131)'},areaStyle: {color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{offset: 0,color: 'rgb(255, 158, 68)'},{offset: 1,color: 'rgb(255, 70, 131)'}])},data: data}]};
​// 确保 DOM 渲染完成后再初始化图表this.$nextTick(() => {const chartDom = document.getElementById('myChart');if (chartDom) {this.chart = echarts.init(chartDom);this.chart.setOption(option);
​
​// 手动绑定触摸事件this.bindTouchEvents(chartDom);}});},
​bindTouchEvents(element) {let startX = 0;let startY = 0;
​element.addEventListener('touchstart', (e) => {if (e.touches.length === 1) {startX = e.touches[0].clientX;startY = e.touches[0].clientY;}}, {passive: false});
​element.addEventListener('touchmove', (e) => {// 阻止默认滚动行为e.preventDefault();}, {passive: false});},
​handleResize() {if (this.chart) {this.chart.resize();}}},
​mounted() {// 延迟初始化确保 DOM 完全加载this.initChart();
​window.addEventListener('resize', this.handleResize);},
​beforeDestroy() {if (this.chart) {this.chart.dispose();}window.removeEventListener('resize', this.handleResize);}
}
</script>
​
<style scoped>
.container {width: 100%;height: 100%;
}
​
.chart {width: 100vw;height: 400px;touch-action: none; /* 关键:禁用浏览器默认的触摸行为 */
}
</style>

http://www.xdnf.cn/news/1454653.html

相关文章:

  • 案例精述 | 防护即智能 Fortinet赋能英科全栈安全重构实践
  • [晕事]今天做了件晕事91,glibc,rand之前必须设置种子
  • AI+Java 守护你的钱袋子!金融领域的智能风控与极速交易
  • Elasticsearch面试精讲 Day 8:聚合分析与统计查询
  • docker更新jar包,懒人执行脚本
  • 若依微服务遇到的配置问题
  • 【数据可视化-108】2025年6月新能源汽车零售销量TOP10车企分析大屏(PyEcharts炫酷黑色主题可视化)
  • JUnit 详解
  • Rust+slint实现一个登录demo
  • 一文搞懂保险中的Nominee\Beneficiary\Trustee三个角色
  • Rustdesk搭建与客户端修改与编译
  • 从零开始的云计算生活——第五十八天,全力以赴,Jenkins部署
  • MD 格式说明
  • Web与Nginx网站服务
  • 2023 arXiv MapperGPT: Large Language Models for Linking and Mapping Entities
  • # 开发中使用——鸿蒙CoreSpeechKit让文字发声后续
  • 迈威通信从送快递角度教你分清网络二层和三层
  • 美团开源龙猫大模型,与DeepSeek V3同一梯队?
  • matlab实现希尔伯特变换(HHT)
  • vue2 打包生成的js文件过大优化
  • 白平衡分块统计数据为什么需要向下采样?
  • Web应用安全入门:从OWASP Top 10理解SQL注入与纵深防御
  • GcWord V8.2 新版本:TOA/TA字段增强、模板标签管理与PDF导出优化
  • 政务级数据安全!小陌GEO引擎的私有化部署实践指南
  • 机器学习 - 使用 ID3 算法从原理到实际举例理解决策树
  • 【开题答辩全过程】以宠物应急救援平台为例,包含答辩的问题和答案
  • 视频增强AI哪个效果好?实战对比帮你找到最适合的工具
  • 【Python基础】 14 Rust 与 Python 标识符命名规则与风格对比笔记
  • 中值滤波、方框滤波、高斯滤波、均值滤波、膨胀、腐蚀、开运算、闭运算
  • 2025年数学建模国赛C题超详细解题思路