vue+animejs循环走马灯实现平滑动态折线图

前言:不是最优解,仅仅提供一种实现思路。

目标:需要实现一个平滑流畅的动态折线图

最开始尝试使用ECharts动态更新实现,实际数据由于波动较大,在动态更新数据重新绘制的过程中,人眼捕捉到的变化效果并不理性。

所以尝试了其他的方式。长连接获取的数据渲染后延迟显示。

这里用到了animejs循环走马灯

1、npm install animejs

2、import anime from "animejs/lib/anime.js";

<div class="cell">
    <div class="roll">
        <div id="channel11" class="box"></div>
        <div id="channel12" class="box"></div>
        <div id="channel13" class="box"></div>
     </div>
</div>

mounted() {
    var xTrans = [];
    anime.set(".box", {
      translateX: function (el, i, l) {
        xTrans[i] = { x: i * 1600 };
        return i * 1600;//一屏的宽度
      },
    });
    anime({
      targets: xTrans,
      duration: 60000, //走一周持续时间
      easing: "linear",
      direction: "reverse",
      x: "+=4800", //1600*3 一共三个屏
      loop: true,
      update: function (anim) {
        anime.set(".box", {
          translateX: function (el, i, l) {
            return xTrans[i].x % 4800;
          },
        });
      },
    });
}
<style scoped>
    .cell{
      width: 1600px;
      height: 300px;
      overflow: hidden;
      position: absolute;
    }
    .rolling {
      height: 300px;
      position: relative;
      left: -1600px;/*left距离设置一屏主要是隐藏循环过程中一屏内容突然消失*/
    }
    
</style>

然后在三个box内绘制折线图,循环过程中重绘内容实现平滑的动态折线图 

最终效果

Video_2022-05-07_172138

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 抱歉,由于提供完整的代码涉及到多个文件和组件,无法在此回答。不过,我可以为您提供一个基本的代码框架和思路: 1. 在 Spring Boot 中创建一个 REST API 服务,用于获取动态路由信息并返回给前端。可以使用 Spring Security 管理权限。 2. 在前端使用 Vue.js 和 ElementUI 创建页面,使用 Vue Router 管理路由,包括静态路由和动态路由。 3. 在 Vue.js 中,使用 axios 发送请求到后端获取动态路由信息,并将其添加到路由配置中。 4. 在 ElementUI 中,可以使用菜单组件和面包屑组件展示路由信息,方便用户导航。 需要注意的是,动态路由的实现需要前后端共同配合,后端提供动态路由信息接口,前端调用接口并根据返回结果动态生成路由。由于每个项目的实现细节和逻辑都可能不同,因此需要具体情况具体分析,这里提供的只是一个大致的思路和框架。 ### 回答2: Vue + ElementUI + SpringBoot + MySQL 实现动态路由的全部代码示例如下: 1. Vue 前端代码: ```javascript // main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import router from './router' // 导入路由配置 import axios from 'axios' Vue.config.productionTip = false Vue.use(ElementUI) Vue.prototype.$axios = axios new Vue({ router, render: h => h(App) }).$mount('#app') ``` ```html <!-- App.vue --> <template> <div id="app"> <router-view></router-view> </div> </template> <script> export default { name: 'App' } </script> ``` ```javascript // router.js import Vue from 'vue' import VueRouter from 'vue-router' import axios from 'axios' import { Message } from 'element-ui' Vue.use(VueRouter) const routes = [ { path: '/', name: 'Home', component: () => import('@/views/Home.vue') }, // 其他路由配置... ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) // 动态路由获取示例 router.beforeEach((to, from, next) => { if (to.meta.requiresAuth) { // 路由需要权限验证 axios.get('/api/checkAuth').then(response => { if (response.data.success) { next() } else { Message.error('需要登录') next('/login') } }) } else { // 其他路由直接放行 next() } }) export default router ``` 2. SpringBoot 后端代码: ```java // AuthController.java @RestController @RequestMapping("/api") public class AuthController { @GetMapping("/checkAuth") public ResponseEntity<?> checkAuth() { // 检查权限的逻辑 // 返回一个标志,表示是否有权限 return ResponseEntity.ok().body(new ApiResponse(true, "权限验证通过")); } } ``` 3. MySQL 数据库表设计: ```sql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `user_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `role_id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `FK_user_role_user` (`user_id`), KEY `FK_user_role_role` (`role_id`), CONSTRAINT `FK_user_role_role` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`), CONSTRAINT `FK_user_role_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 以上是基于 Vue、ElementUI、SpringBoot 和 MySQL 实现动态路由的一个简单示例代码。具体的实现逻辑和业务需求可以根据实际情况进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梵鸽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值