svg画简单的立方体

开发背景

要开发一个拖拽的大屏项目,其中涉及到一个装饰组件,是一个立方体cube,要求颜色可以修改,大小可以拖拽改变。

效果如下

在这里插入图片描述

分析

经过我一番奇思妙想,决定用svg实现,因为对svg比较熟悉。那就先来在草纸上画草图吧。

在这里插入图片描述

先假设它的长宽为400,300,4:3的数据好计算,有利于我们前期的分析。分析发现,这个立方体可以简化成两个平面,上面顶部蓝色的和侧面我们所看到的(呈渐变效果)。这就好办多了,定义两条path路径,由其中一个path构建顶部的面,再用另一个path构建侧边的面。

顶部的面设置其fill填充颜色为固定颜色,侧边的面设置其fill为渐变色。此处要注意,渐变色是从中间向两边扩散,这块我用的是linearGradient实现的,具体参照下面代码。

代码实现

分析完后就可以进入coding环节了,思路就是先按照草图画出一个固定宽高的原型,再用变量替换掉固定值。

已知变量
{width: 450,height: 170,decorationColor1: '#244ab2',decorationColor2: '#1c2c9d',fillColor: '#00dcff'
}
关键绘制部分代码
<svgheight="100%"width="100%"><defs><linearGradient id="gradient1"><stopoffset="0%":stop-color="decorationColor1"/><stopoffset="50%":stop-color="decorationColor2"/><stopoffset="100%":stop-color="decorationColor1"/></linearGradient></defs><path:fill="fillColor"stroke="transparent"stroke-width="0":d="`M 0 ${height * (1/3)}L ${width * 0.5} 0L ${width} ${height * (1/3)}L ${width * 0.5} ${height * (2/3)}L 0 ${height * (1/3)}`"/><pathfill="url(#gradient1)"stroke="transparent"stroke-width="0":d="`M 0 ${height * (1/3)}L ${width * 0.5} ${height * (2/3)}L ${width} ${height * (1/3)}L ${width} ${height * (2/3)}L ${width * 0.5} ${height}L 0 ${height * (2/ 3)}L 0 ${height * (1/3)}`"/>
</svg>
全部代码(vue
<template><div:key="updateKey"style="width: 100%;height: 100%"class="bs-design-wrap"><svgheight="100%"width="100%"><defs><linearGradient id="gradient1"><stopoffset="0%":stop-color="decorationColor1"/><stopoffset="50%":stop-color="decorationColor2"/><stopoffset="100%":stop-color="decorationColor1"/></linearGradient></defs><path:fill="fillColor"stroke="transparent"stroke-width="0":d="`M 0 ${height * (1/3)}L ${width * 0.5} 0L ${width} ${height * (1/3)}L ${width * 0.5} ${height * (2/3)}L 0 ${height * (1/3)}`"/><pathfill="url(#gradient1)"stroke="transparent"stroke-width="0":d="`M 0 ${height * (1/3)}L ${width * 0.5} ${height * (2/3)}L ${width} ${height * (1/3)}L ${width} ${height * (2/3)}L ${width * 0.5} ${height}L 0 ${height * (2/ 3)}L 0 ${height * (1/3)}`"/></svg></div>
</template>
<script>import {refreshComponentMixin} from 'data-room-ui/js/mixins/refreshComponent'export default {name: 'Decoration16',components: {},mixins: [refreshComponentMixin],props: {// 卡片的属性config: {type: Object,default: () => ({})}},data() {return {}},computed: {width() {return this.config.w},height() {return this.config.h},fillColor() {return this.config.customize.borderColor},decorationColor1() {return this.config.customize.decorationColor1},decorationColor2() {return this.config.customize.decorationColor2}},watch: {},mounted() {},methods: {}
}
</script><style lang="scss" scoped></style>

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

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

相关文章

python前端通过API接口调用与后端进行数据交互前端如何调用api接口获取电商平台商品实时评论信息数据

要在Python前端通过API接口调用与后端进行数据交互并获取商品实时评论信息数据&#xff0c;可以通过封装好的api接口通过链接直接请求获取商品数据&#xff0c;以下是接入api的请求示例&#xff1a; # coding:utf-8 """ Compatible for python2.x and python3.…

柯桥成人职场英语/Excuse me 是 “不好意思”,那 Excuse you呢?

口语中&#xff0c;excuse me的使用频率非常高 甚至已经成为大家的口头禅 用在一些表示歉意或者打扰对方的场合 本来excuse me的用法就已经够丰富了 没想到竟然还有excuse you&#xff1f; 哈哈哈&#xff0c;别蒙圈 这篇就给大家捋捋excuse的那些表达 快和小编一起来学学…

【博客20】缤果Matlab串口调试助手V1.0(中级篇)

超级好用的Matlab串口调试助手 开发工具: MATLAB 2024a中文版 (编程语言matlab) 目录 前言 一、软件概要&#xff1a; 二、软件界面&#xff1a; 1.App演示 ​ ​---- ◇♣♡♠ ---- 2.其他扩展App展示 ​编辑 三、获取 >> 源码以及Git记录&#xff1a; 总结 前…

海外仓系统要多少钱?最贵的未必是最好的,性价比高的才是

海外仓系统可以说已经是现在海外仓管理不可或缺的重要工具&#xff0c;然而&#xff0c;很多海外仓企业在选择海外仓系统时最头疼的问题就是不知道到底多少钱才合适。 确实&#xff0c;现在的海外仓系统市场价格体系非常多&#xff0c;几万几十万各种定价都有&#xff0c;让人…

期刊issn清洗方法

文章目录 一、前言二、实现方法一、前言 该代码用于统一期刊不规范的issn格式,并筛选出错误的issn 二、实现方法 import numpy as npclass CleanJournal():@classmethoddef isNaNo(cls, sth):

【深度学习】contorlnet Pixel Perfect

https://andyhtu.com/understanding-controlnets-pixel-perfect-in-stable-diffusion/ 稳定扩散与AI工作流程优化&#xff1a;深入探索ControlNet的像素完美功能 正如一位经验丰富的裁缝通过精确测量确保衣物贴身合体&#xff0c;ControlNet中的“像素完美”功能确保您的图像…

高性能mysql-查询性能优化

优化的核心 一个任务是由很多子任务组成的&#xff0c;每个子任务都会消耗一定时间&#xff0c;如果优化查询&#xff0c;要么消去一些子任务&#xff0c;要么让子任务更快。 慢查询的基础&#xff1a;优化数据访问 减少访问的行数。 在mysql服务器层是否在分析大量不必要的…

第13章 层次式架构设计理论与实践

层次式架构的核心思想是将系统组成为一种层次结构&#xff0c;每一层为上层服务&#xff0c;并作为下层客户。其实不管是分层还是其他的架构都是为了解耦&#xff0c;更好的复用&#xff0c;只要秉承着这种思想去理解一切都迎刃而解了。 13.1 层次上体系结构概述 回顾一下软件…

什么是Linux?Linux与windows的区别

说到电脑系统 我想有大多数人会脱口而出&#xff1a;windows、mac 是的&#xff0c;这也是如今市场上主流的两种操作系统。 但是对于IT相关的人士来说&#xff0c;还有一种系统也是必须有姓名 那就是Linux 今天我们就来为一些行业新手或是小白来科普一下&#xff0c;什么是…

【uniapp】uniapp页面介绍

目录 开发工具&#xff1a;HBuilderX介绍特点和功能 页面简介页面管理新建页面删除页面页面改名pages.json 设置应用首页 页面内容构成template模板区script 脚本区export default 外的代码export default 里的代码 style样式区 页面生命周期Vue2 页面及组件生命周期流程图Vue3…

重生奇迹MU剑士两把单手剑

重生奇迹mu觉醒剑士在武器的选择上非常广泛&#xff0c;可以单手操作也可以双手&#xff0c;那么许多玩家觉得单手剑特别帅气&#xff0c;能否装备两个单手剑&#xff0c;感兴趣的玩家一起来看看详情介绍。 单手剑是一个单手武器&#xff0c;你可以选择装备一个单手剑&#xf…

力扣283题:移动零(快慢指针)

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入: nums [0] 输出: [0…

13.Redis之数据库管理redis客户端JAVA客户端

1.数据库管理 mysql 中有一个重要的概念,database 1个 mysql 服务器上可以有很多个 database1个 database 上可以有很多个 表mysql 上可以随心所欲的 创建/删除 数据库~~ Redis 提供了⼏个⾯向 Redis 数据库的操作&#xff0c;分别是 dbsize、select、flushdb、flushall 命令…

Yii 结合MPDF 给PDF文件添加多行水印

首先确保安装了mpdf扩展 composer require mpdf/mpdf public function createWaterPdf($file_path,$water_text){date_default_timezone_set(PRC);ini_set(memory_limit, 6400M);ini_set(max_execution_time, 0);try{$mpdf new Mpdf();$pageCount $mpdf->SetSourceFile…

在 GPT-4o 释放完整能力前,听听实时多模态 AI 创业者的一手经验 | 编码人声

「编码人声」是由「RTE开发者社区」策划的一档播客节目&#xff0c;关注行业发展变革、开发者职涯发展、技术突破以及创业创新&#xff0c;由开发者来分享开发者眼中的工作与生活。 5 月中旬 GPT-4o 的发布&#xff0c;让人与 AI 的交互&#xff0c;从对话框的文本交流加速推进…

去除uni微信小程序button的边框

想要去除button的边框&#xff0c;如下未去除边框时&#xff0c;非常影响观感。 解决方法 使用伪元素::after&#xff0c;简单但是易忘&#xff0c;正常情况下,我直接是给button上加上一个类名直接设置border&#xff1a;none&#xff0c;但是这样是无效的&#xff0c;应该如下…

前端canvas实现图片涂鸦(Vue2、Vue3都支持)

先看一下效果图吧 代码组成&#xff1a;画笔大小、颜色、工具按钮都是组件&#xff0c;通俗易懂&#xff0c;可以按照自己的需求调整。 主要代码App.vue <template><div class"page"><div class"main"><div id"canvas_panel&qu…

Codeforces Round 803 (Div. 2) C. 3SUM Closure (数学模拟 + 暴力枚举)

给你一个长度为 n 的数组 a 。如果对于所有不同的索引 i &#xff0c; j &#xff0c; k &#xff0c;和 aiajak 都是数组的元素&#xff0c;那么这个数组称为 3SUM 闭合数组。更正式地说&#xff0c;如果对于所有整数 1≤i<j<k≤n 存在某个整数 1≤l≤n 使得 aiajakal 是…

动态规划part01 Day41

动态规划算法解题步骤 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 LC509斐波那契数 LC70爬楼梯 LC746使用最小花费爬楼梯 dp[]含义&#xff1a;爬到第i层楼梯的最小花费

梯度下降、反向传播、激活函数、参数初始化、批量归一化是深度学习中常用的几个概念

梯度下降、反向传播、激活函数、参数初始化、批量归一化是深度学习中常用的几个概念。下面我将对这些概念进行简要的凝练解释&#xff0c;并给出相应的例子。 梯度下降&#xff08;Gradient Descent&#xff09;: 原理: 通过迭代地调整参数&#xff0c;使得损失函数的值最小化…