用Vue3和Rough.js绘制一个交互式3D图

Alt

本文由ScriptEcho平台提供技术支持

项目地址:传送门

基于Rough.js和GSAP创建交互式SVG图形卡片

应用场景

本代码适用于需要创建动态交互式SVG图形卡片的场景,例如网页设计、数据可视化和交互式艺术作品。

基本功能

该代码利用Rough.js和GSAP库,通过JavaScript动态生成SVG图形,并使用CSS动画为这些图形添加交互性。具体来说,它创建了一个由粗糙形状组成的卡片,这些形状会以流畅的方式逐一显示,形成一个引人注目的动画效果。

功能实现步骤及关键代码分析

1. 导入库和初始化
import { onMounted } from 'vue'
import rough from 'roughjs'
  • 导入必要的库和工具。
2. 加载JavaScript库
const loadJavascript = (jsUrl) => {return new Promise((resolve, reject) => {const script = document.createElement('script')script.type = 'text/javascript'script.onload = () => resolve('')script.onerror = (err) => reject(err)script.src = jsUrldocument.body.appendChild(script)})
}
  • 定义一个异步函数来动态加载JavaScript库(在本例中为GSAP)。
3. 生成SVG形状
let generator = rough.generator({}, { width: 220, height: 220 })
let paths = []
  • 使用Rough.js创建一个生成器,并指定图形的宽高。
4. 定义图形形状
let rect = generator.rectangle(10, 10, 70, 70, {...})
paths = paths.concat(generator.toPaths(rect).reverse())
  • 使用生成器创建不同的形状,例如矩形、圆形等。将这些形状转换为SVG路径,并将其存储在paths数组中。
5. 创建SVG元素
let toDraw = []
svg.style.opacity = 0
paths.forEach((path) => {...})
  • 为每个SVG路径创建一个SVG路径元素,并将其添加到SVG元素中。
6. 动画显示
let tl = gsap.timeline({onStart: () => (svg.style.opacity = 1),
})
toDraw.forEach((path) => {tl.fromTo(path.el,0.001 * path.len,{strokeDashoffset: path.len,},{strokeDashoffset: 0,},)
})
  • 使用GSAP创建时间线动画,并为每个路径添加一个从隐藏到显示的动画。

总结与展望

开发经验与收获

通过开发这段代码,我学到了如何使用Rough.js和GSAP创建交互式SVG图形。我了解了如何使用Rough.js生成各种形状,以及如何使用GSAP对这些形状进行动画处理。

未来拓展与优化

未来,该代码可以进一步拓展和优化,例如:

  • 添加对用户交互的支持,允许用户通过单击或悬停来触发动画。

  • 使用不同的形状和颜色创建更复杂的图形。

  • 探索使用WebGL或Canvas等其他技术来实现更高级的动画效果。

    更多组件:

    在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/b525afb335bd48febe652e4d095cc036.jpeg#pic_center)
</a>

获取更多Echos

本文由ScriptEcho平台提供技术支持

项目地址:传送门

扫码加入AI生成前端微信讨论群:

扫码加入群聊

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(五)CSS浮动与补白

目录&#xff1a; 内容&#xff1a; //设置左右浮动 .left{float:left; } .right{float:right; } /*必须设置不同浮动*/ //创建div <div> <dic class"left">左边</div> <div class"right">右边</div> </div> //设置浮…

地铁车厢火灾3D模拟逃生演习减少了资源损耗和风险

在消防安全领域&#xff0c;为了更好地提升安全实训效果&#xff0c;我们在VR安全培训领域打造了多款消防安全VR模拟实训系统&#xff0c;不仅实现了与现实世界无异的交互操作&#xff0c;更在虚拟空间中超越了现实的限制&#xff0c;模拟出那些现实中难以搭建的复杂场景。 利用…

mysql:部署MySQL 8.0 环境

mysql网址&#xff1a;MySQL 点击 MySQL Community Server 选择合适的版本 选择8.0版本 下载完成&#xff0c;点击mysql-installer-community-8.0.26.0.msi文件&#xff0c;打开安装向导。 选择自定义安装类型 打开“Select Products” 窗口&#xff0c;可以定制需要安装的产…

成都晨持绪:开一家抖音网店到底能不能赚钱

在数字化时代的浪潮中&#xff0c;抖音以其独特的魅力迅速占领了社交媒体的舞台。众多创业者纷纷把目光投向这个新兴平台&#xff0c;企图在短视频的海洋里找到属于自己的财富岛屿。但是&#xff0c;开一家抖音网店到底能不能赚钱呢? 我们要认识到&#xff0c;抖音作为一个流量…

lt6911UXC 国产原装 高性能HDMI2.0转MIPI DSI / CSI芯片方案 提供LT 开发资料包及在线软硬件技术支持!

1.说明 LT6911UXC是一款高性能HDMI2.0到MIPI DSI / CSI转换器&#xff0c;用于VR&#xff0c;智能电话&#xff0c;显示应用。 HDMI2.0输入支持高达6Gbps的数据速率&#xff0c;从而为4k 60Hz视频提供足够的带宽。还支持HDCP2.2进行数据解密。 对于MIPI DSI / CSI输出&#xf…

【路由交换技术】Cisco Packet Tracer基础入门教程(五)

这一期我们来学习端口聚合&#xff0c;这是针对交换机的技术 前言 不知道大家有没有注意到&#xff0c;我们之前的实验在交换机与交换机之间只用一条线连接&#xff0c;像这样 通过今天的学习&#xff0c;我们要用两条线来连接交换机&#xff0c;就像这样&#xff08;为了能…

人力资源中的人工智能:你应该知道的一切

人工智能已经成为行业讨论更广泛的突出话题。人力资源(HR)对于人力资源专业人士来说&#xff0c;了解这门课程也是如此。除了简要介绍什么是人工智能&#xff0c;以及你可能遇到的主要人工智能类型(或者你可能很快就会遇到它&#xff01;)此外&#xff0c;本文还将探讨人工智能…

并发控制-事务的调度、数据不一致问题(更新丢失、脏读、不可重复读)、非串行调度的的可串行化

一、引言 1、数据库管理系统DBMS的事务处理技术实现的另一个主要功能部分是并发控制机制。并发控制机制完成的功能就是对并发执行的事务进行控制&#xff0c;保证事务的隔离性&#xff0c;从而进一步保持数据库的一致性。 2、事务的并发控制就是对并发执行的不同事务中的数据…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…

【安全攻防】网络安全中的序列化与反序列

1.序列化与反序列化 首先要了解序列化与反序列化的定义&#xff0c;以及序列化反序列化所用到的基本函数。 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化&#xff0c;相当于游戏中的存档。 PHP中的序列化函数serialize() **serialize()**函数用于序列化对…

VScode使用ssh连接服务器

VScode是一款有丰富插件的编译器&#xff0c;非常好用&#xff01;除非你不会用&#xff0c;因为太过繁琐或着频繁出错导致想把电脑砸了&#xff1b; 插件选择 ssh 配置文件 Host myblablaHostName xxx.xx.xxx.xxxUser username用户名一般是服务器上创建有什么用户名&#xf…

【Vue】使用html、css实现鱼骨组件

文章目录 组件测试案例预览图 组件 <template><div class"context"><div class"top"><div class"label-context"><div class"label" v-for"(item, index) in value" :key"index">…

深入探讨JavaScript中的队列,结合leetcode全面解读

前言 队列作为一种基本的数据结构&#xff0c;为解决许多实际问题提供了有效的组织和处理方式&#xff0c;对于提高系统的稳定性、可靠性和效率具有重要作用&#xff0c;所以理解队列是很重要的。 本文深入探讨JavaScript中的队列这种数据结构,结合leetcode题目讲解 题目直达…

DolphinScheduler部署安装or基础介绍(一)

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用 DolphinScheduler核心架构 DolphinScheduler的主要角色如下&#xff1a; Ma…

2024攻防演练:亚信安全推出MSS/SaaS短期定制服务

随着2024年攻防演练周期延长的消息不断传出&#xff0c;各参与方将面临前所未有的挑战。面对强大的攻击队伍和日益严格的监管压力&#xff0c;防守单位必须提前进行全面而周密的准备和部署。为应对这一形势&#xff0c;亚信安全特别推出了为期三个月的MSS/SaaS短期订阅方案。该…

一站式配套,全方位服务升级——全力打造企业新家园

国际数字影像产业园通过完善配套设施和优化服务&#xff0c;为入园企业提供了高效、便捷、专业的服务支持&#xff0c;助力企业实现快速发展和转型升级。同时&#xff0c;园区的数字化和智能化发展策略也为整个数字影像产业的繁荣发展提供了有力支撑。 一、完善配套设施 1、高…

程序包lombok不存在,解决办法。

当前方法是针对于代码没有报错&#xff0c;本身有lombok jar包的情况 1.找到本地maven仓库中的已经下载好的lombok包&#xff0c;删掉。 2. 直接刷新maven&#xff0c;会重新下载lombok jar包&#xff0c;此时再启动项目时就可以正常运行了。

UE4_材质基础_切线空间与法线贴图

学习笔记&#xff0c;不喜勿喷&#xff0c;侵权立删&#xff0c;祝愿大家生活越来越好&#xff01; 一、切线空间 在《OpenGL基础11&#xff1a;空间》中提到了观察空间、裁剪空间、世界空间等。切线空间和它们一样&#xff0c;都属于坐标空间 上面就是一个…

Lesson 46 Can you ... ?

Lesson 46 Can you … ? 词汇 lift v. 拿起&#xff0c;搬起 n. 电梯&#xff08;直梯&#xff09; 用法&#xff1a;1. lift … up 拎起……    例句&#xff1a;我可以拎起那只小猫。       I can lift that cat up.    2. take a lift    例句&#xff1a…

如何在Docker容器中,修改MySQL密码

如果MySQL运行在Docker容器中&#xff0c;修改MySQL密码的方法稍有不同。以下是如何在Docker中修改MySQL密码的步骤&#xff1a; 方法1&#xff1a;使用MySQL命令行工具 1. 找到MySQL容器的ID或者名字&#xff1a; docker ps 2. 进入MySQL容器&#xff1a; docker exec -i…