uniapp vue3 使用echarts-gl 绘画3d图表

    我自己翻遍了网上,以及插件市场,其实并没有uniapp 上使用echarts-gl的样例,大多数都是使用插件市场的echarts的插件

   开始自己尝试直接用echartsgl  没有成功,后来尝试使用threejs  但是也遇到一些问题,最后我看官网的时候有   web-view | uni-app官网  想着就可以做一个外嵌的网页

 一、效果图 

 二、使用过程

1、先写一个外部的html

    结构的网页   就是自己跳转的写就行了

  (因为我用到了着一些js就引用了)

     uniapp官网有uniapp 和外部通信的方法和回调函数(但是都没用,不知道为什么)

    个人不知道为什么里面官方的方法没有用,比如数据传输和调用成功的方法(因为我只做数据展示,所以我在这里直接请求数据回来展示就行了)下面是官方的方法,如果有大佬知道这是为什么,请给小子留言是为什么谢谢。

2、uniapp代码

//在当前页面点击跳转(配界面我就不用说了大家去自己的pages.json去添加就行了)
uni.navigateTo({
	url: `/pages/threeView`
})

// 另外写一个页面,这个页面专门负责跳转外部链接窗口的
<template>
	<web-view :src="data.url"></web-view>
</template>
<script setup>
	import {
		reactive,
		ref,
	} from 'vue';
	let data = reactive({
	 url: "http://127.0.0.1:8080/"
	})
</script>

    必须要使用一个页面跳转到,为什么要这样写,因为跳转之后就会有返回的一个箭头

           如果直接在一个页面上跳转就会出现

 3、跳转外部的地址

http://127.0.0.1:8080/  我这里上面是我自己启的一个服务

小程序仅支持加载网络网页,不支持本地htm   

所以如果真是的时候还是得让后端挂到服务器上面去

4、本地代码html

(其中的js 都是)  插件 引用了axios、echarts-gl、echarts、html2canvas 、vuejs(使用vue3写法)这些js 网络上都有可自行下载

如果自己不会挂,请参考以下

使用本地服务器打开html文件_html以服务器打开-CSDN博客

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>3D图标展示</title>
    <script src="./echarts.min.js"></script>
    <script src="./echarts-gl.min.js"></script>
    <!-- <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
    <script type="text/javascript" src="https://gitcode.net/dcloud/uni-app/-/raw/dev/dist/uni.webview.1.5.6.js">
    </script> -->
    <script src="./axios.min.js"></script>
    <script src="./vue.js"></script>
    <script src="./html2canvas.min.js"></script>
</head>

<body>
    <div id="app">
        <div class="operation">
            <button class="kaishi" @click="kaishi">开始</button>{{test}}
            <button class="zanting" @click="zanting">暂停</button>
            <button class="xiazai" @click="xiazai">下载图片</button>
        </div>
        <div class="content">
            <div id="mychart" style="width:90vw;height:375px;"></div>
        </div>
    </div>
    <script>
        const {
            createApp,
            ref,
            onMounted
        } = Vue
        const app = createApp({
            setup() {
                //测试变量
                let index = 0;
                let intervalId;
                let curveData = []
                let dtc = null
                let option
                //测试函数
                const kaishi = () => {
                    if (!intervalId) {
                        intervalId = setInterval(function () {
                            updatePoint(index++);
                            if (index >= curveData.length) index = 0; // 循环回到起点
                        }, 100);
                    }
                }
                const zanting = () => {
                    if (intervalId) {
                        clearInterval(intervalId);
                        intervalId = null;
                    }
                }
                const xiazai = () => {
                    html2canvas(document.getElementById("mychart")).then(function (canvas) {
                        var img = canvas
                            .toDataURL("image/png")
                            .replace("image/png", "image/octet-stream");
                        // 创建a标签,实现下载
                        var creatIMg = document.createElement("a");
                        creatIMg.download = "3d.png"; // 设置下载的文件名,
                        creatIMg.href = img; // 下载url
                        document.body.appendChild(creatIMg);
                        creatIMg.click();
                        creatIMg.remove(); // 下载之后把创建的元素删除
                    })

                }



                onMounted(() => {
                    init()

                })

                const init = () => {
                    axios({
                        method: "get",
                        url: "https://mpapi.sstlab.cn/test/ssr/latest?name=undefined&type=1"
                    }).then(function (resp) {
                        console.log(resp, "resp");
                    })

                    dtc = echarts.init(document.getElementById('mychart'))
                    option = {
                        tooltip: {},
                        visualMap: {
                            show: false,
                            dimension: 2,
                            min: -1,
                            max: 1,
                            inRange: {
                                color: [
                                    '#313695',
                                    '#4575b4',
                                    '#74add1',
                                    '#abd9e9',
                                    '#e0f3f8',
                                    '#ffffbf',
                                    '#fee090',
                                    '#fdae61',
                                    '#f46d43',
                                    '#d73027',
                                    '#a50026'
                                ]
                            }
                        },
                        xAxis3D: {},
                        yAxis3D: {},
                        zAxis3D: {},
                        grid3D: {
                            left: '5%',
                            top: '-5%',
                            right: '5%',
                            bottom: '0%',
                            containLabel: true,

                            viewControl: {
                                distance: 230 // 根据实际情况调整这个值,数值越大,看起来图表越小
                            }
                        },
                        series: [{
                            type: 'line3D',
                            coordinateSystem: 'cartesian3D',
                            lineStyle: {
                                width: 2,
                                color: '#ff0000' // 线的颜色
                            },
                            data: (function () {
                                let data = [];
                                for (let t = 0; t < 2 * Math.PI; t += 0.1) {
                                    data.push([Math.sin(t), Math.cos(t),
                                        t
                                    ]); // x, y, z 坐标
                                }
                                return data;
                            })()
                        }, {
                            id: 'movingPoint', // 用于更新数据时引用
                            type: 'scatter3D',
                            coordinateSystem: 'cartesian3D',
                            symbolSize: 10, // 点的大小
                            itemStyle: {
                                color: 'blue' // 点的颜色
                            },
                            data: [] // 初始为空
                        }]
                    }

                    if (localStorage.getItem("threeView")) {
                        console.log(localStorage.getItem("threeView"), "11111");
                        option.series[0].data = JSON.parse(localStorage.getItem("threeView"));
                    }
                    // 使用刚指定的配置项和数据显示图表
                    dtc.setOption(option);
                    // 获取曲线数据
                    curveData = option.series[0].data;


                }


                // 更新点的位置函数
                const updatePoint = (index) => {
                    if (index >= curveData.length) index = 0; // 循环回到起点
                    dtc.setOption({
                        series: [{
                            id: 'movingPoint',
                            data: [curveData[index]]
                        }]
                    });
                }


                return {
                    kaishi,
                    zanting,
                    xiazai
                }
            }
        })

        app.mount("#app")
    </script>

</body>

</html>
<style>
    .content {
        width: 100%;
        height: 100%;
    }

    #mychart {
        margin: auto;
    }

    .operation {
        position: fixed;
        top: 10px;
        left: 10px;
        z-index: 1000;
    }
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909540.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576

问题描述 我目前的环境是&#xff1a; 编辑器&#xff1a; Microsoft Visual Studio Community 2022 (64 位) 运行的脚本是ffmpeg自带的remux样例&#xff0c;只不过我想用c语言执行这个样例。在执行的过程中报错如下图&#xff1a; C4576 后跟初始值设定项列表的带圆括…

Moore Perf System 1.1版本

Moore Perf System&#xff08;一款性能分析工具&#xff09; 提供可视化界面&#xff0c;在时间轴上按时间顺序显示 CPU 和 GPU 的事件、吞吐和性能指标&#xff0c;帮助开发人员方便、快速、准确的定位到系统级别的性能瓶颈&#xff0c;进而进行针对性分析和优化&#xff0c;…

『VUE』19. scope避免组件之间样式互相覆盖(详细图文注释)

目录 使用多个组件带有样式分析如何避免css覆盖总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 使用多个组件带有样式 ComPonent1.vue <template><h3>ComPonent1.vue</h3> </template><script&g…

数据结构 C/C++(实验二:栈)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释…

软考背诵笔记

计算机硬件组成 运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备 中央处理单元&#xff08;CPU&#xff09; 控制器组成 指令寄存器&#xff08;IR&#xff09;:暂存cpu执行指令 程序计数器&#xff08;PC&#xff09;:存放下一条执…

面试问答-1

目录 1、线程和进程的概念&#xff0c;区别、以及什么时候用线程什么时候用进程 1.1 概念 1.2 区别 1.3 选择 2、TCP/IP分几层&#xff0c;每层的核心任务是什么 1.tcp/ip模型 tcp&#xff1a; udp&#xff1a; tcp、udp的区别 tcp/udp的连接过程&#xff1a; 3、htt…

矩阵特殊打印方式

小伙伴们大家好&#xff0c;好几天没更新了&#xff0c;主要有个比赛。从今天起继续给大家更新&#xff0c;今天给大家带来一种新的题型&#xff1a;矩阵特殊打印方式。 螺旋打印矩阵 解题思路 首先给大家看一下什么是螺旋方式打印&#xff1a; 就像这样一直转圈圈。 我想大多…

Docker篇(Docker安装)

目录 一、Centos7.x 1. yum 包更新到最新 2. 安装需要的软件包 3. 设置 yum 源为阿里云 4. 安装docker 5. 安装后查看docker版本 6. 设置ustc镜像源 二、CentOS安装Docker 前言 1. 卸载&#xff08;可选&#xff09; 2. 安装docker 3. 启动docker 4. 配置镜像加速 …

计算机网络——路由器构成

算路由表是分布式去算——你算你的&#xff0c;我算我的 输出队列非先来先传 调度发生在哪里 缓存队列一般是应对——来数据方向的速度过快问题

C# 实现读取Excel文件并设置单元格计算公式再保存

背景&#xff1a;需求需要读取数据导出成Excel文件&#xff0c;并且其中有一列需要赋值为公式&#xff0c;用于用户自己修改数据自动计算 导出Excel&#xff0c;我用到开源包MiniExcel Gitee地址MiniExcel源码介绍&#xff0c;功能说明 Nuget安装 搜索MiniExcel 导出代码如下&a…

基于matlab的SVPWM逆变器死区补偿算法仿真研究

背景介绍&#xff1a; 三相脉宽调制(pulse width modulation&#xff0c;PWM)电压源逆变器(voltage source inverter&#xff0c;VSI)的死区效应可导致电机相电压和相电流畸变、零电流钳位效应以及转矩和转速脉动&#xff0c;系统性能降低。为提高系统运行性能&#xff0c;对V…

Spring Validation数据校检

文章目录 Spring Validation1 关于Spring Validation2 使用流程3 快速入门4 运行异常处理4.1 说明4.2 处理异常4.3 明确提示消息 5 常用注解5.1 NotNull注解5.2 NotEmpty 注解5.3 NotBlank 注解5.4 Size 注解5.5 Range 注解 6 非POJO参数校验6.1 使用流程6.2 使用示例 Spring V…

2024数据库国测揭晓:安全与可靠的新标准,你了解多少?

2024年数据库国测的结果&#xff0c;于9月份的最后一天发布了。 对于数据库行业的从业者来说&#xff0c;国测是我们绕不过去的坎儿。那么什么是国测&#xff1f;为什么要通过国测&#xff0c;以及国测的要求有哪些&#xff1f; 这篇文章带大家一探究竟。 国测 自愿平等、客…

前端入门一之CSS知识详解

前言 CSS是前端三件套之一&#xff0c;在MarkDown中也完美兼容这些语法&#xff1b;这篇文章是本人大一学习前端的笔记&#xff1b;欢迎点赞 收藏 关注&#xff0c;本人将会持续更新。 文章目录 Emmet语法&#xff1a;CSS基本语法&#xff1a;css语法结构只有3种&#xff1a…

虚拟现实和增强现实技术,如何打造沉浸式体验?

内容概要 在这个科技飞速发展的时代&#xff0c;虚拟现实&#xff08;VR&#xff09;与增强现实&#xff08;AR&#xff09;技术的结合就像调皮的小精灵&#xff0c;一下子把我们的生活变得神奇又有趣。想象一下&#xff0c;你正在游戏中与精灵搏斗&#xff0c;突然间身边的客…

EL面包屑导航实现

前言 el-breadcrumb 是 Element Plus 中的面包屑导航组件&#xff0c;主要用于展示当前页面在整个应用程序中的位置&#xff0c;并提供导航功能 https://element-plus.org/zh-CN/component/breadcrumb 基础用法 在 el-breadcrumb 中使用 el-breadcrumb-item 标签表示从首页开…

Qt 练习做一个登录界面

练习做一个登录界面 效果 UI图 UI代码 <?xml version"1.0" encoding"UTF-8"?> <ui version"4.0"><class>Dialog</class><widget class"QDialog" name"Dialog"><property name"ge…

c语言简单编程练习10

1、typedef和#define的区别 在用作数据类型替换时的区别&#xff1a; #include <stdio.h> #include <unistd.h>typedef char * A; //typedef需要&#xff1b; #define B char *int main(int argc, char *argv[]) {A a,b;B c,d;printf("a_size%ld\n"…

【spark的集群模式搭建】Standalone集群模式的搭建(简单明了的安装教程)

文章目录 1、使用Anaconda部署Python2、上传、解压、重命名3、创建软连接4、配置spark环境变量5、修改 spark-env.sh配置文件6、启动hdfs&#xff0c;创建文件夹7、修改spark-defaults.conf配置文件8、修改workers配置文件9、修改log4j.properties配置文件&#xff08;可选&…

ST-GCN模型实现花样滑冰动作分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…