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'
}
关键绘制部分代码
<svg
      height="100%"
      width="100%"
    >
      <defs>
        <linearGradient id="gradient1">
          <stop
            offset="0%"
            :stop-color="decorationColor1"
          />
          <stop
            offset="50%"
            :stop-color="decorationColor2"
          />
          <stop
            offset="100%"
            :stop-color="decorationColor1"
          />
        </linearGradient>
      </defs>

      <path
        :fill="fillColor"
        stroke="transparent"
        stroke-width="0"
        :d="`M 0 ${height * (1/3)}
                L ${width * 0.5} 0
                L ${width} ${height * (1/3)}
                L ${width * 0.5} ${height * (2/3)}
                L 0 ${height * (1/3)}
                `"
      />
      <path
        fill="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"
  >
    <svg
      height="100%"
      width="100%"
    >
      <defs>
        <linearGradient id="gradient1">
          <stop
            offset="0%"
            :stop-color="decorationColor1"
          />
          <stop
            offset="50%"
            :stop-color="decorationColor2"
          />
          <stop
            offset="100%"
            :stop-color="decorationColor1"
          />
        </linearGradient>
      </defs>

      <path
        :fill="fillColor"
        stroke="transparent"
        stroke-width="0"
        :d="`M 0 ${height * (1/3)}
                L ${width * 0.5} 0
                L ${width} ${height * (1/3)}
                L ${width * 0.5} ${height * (2/3)}
                L 0 ${height * (1/3)}
                `"
      />
      <path
        fill="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>

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

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

相关文章

LabVIEW中实现Trio控制器的以太网通讯

在LabVIEW中实现与Trio控制器的以太网通讯&#xff0c;可以通过使用TCP/IP协议来完成。这种方法包括配置Trio控制器的网络设置、使用LabVIEW中的TCP/IP函数库进行数据传输和接收&#xff0c;以及处理通讯中的错误和数据解析。本文将详细说明实现步骤&#xff0c;包括配置、编程…

职责链设计模式

职责链设计模式&#xff08;Chain of Responsibility Design Pattern&#xff09;是一种行为设计模式&#xff0c;使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合。这些对象被链接成一条链&#xff0c;沿着这条链传递请求&#xff0c;直到有一…

【Vue】自动导入组件

1. 下载插件 npm install unplugin-vue-components 2. 修改vite.config.js import { fileURLToPath, URL } from node:urlimport { defineConfig } from vite import vue from vitejs/plugin-vue import Components from unplugin-vue-components/vite // 按需加载自定义组件/…

2、PHP 8.1.0-dev 后门远程命令执行漏洞复现

1、青少年ctf&#xff0c;题目PHP后门 2、页面 3、bp抓包发现PHP版本为8.1.0-dev 4、尝试使用以前爆出过的漏洞&#xff08;网上查相关案例&#xff09; User-Agentt: zerodiumvar_dump(5*5); User-Agentt: zerodiumsystem("cat /flag"); 5、查找flag User-Agentt: z…

3.游戏中自定义数据类型的解读分析

知识来源于腾讯课堂易道云 结构的解释&#xff1a; 计算机里的所有东西都是用二进制表示的&#xff0c;二进制是数字&#xff0c;我们用的阿拉伯数字0-9这个数字是十进制&#xff0c;计算机用的是二进制只有0或1&#xff0c;然后都是一堆0或1的数字&#xff0c;游戏中怎么把这…

路径规划算法--BFS

系列文章目录 文章目录 系列文章目录一、BFS二、BFS伪代码BFS与Dijkstra区别 一、BFS BFS&#xff08;Breadth First Search&#xff09;为广度优先搜索&#xff0c;是一种用于遍历或搜索树或图的搜索算法&#xff0c;适用于无权图的遍历。BFS从根节点开始&#xff0c;探索其相…

AI大模型:大数据+大算力+强算法

前言&#xff1a;好久不见&#xff0c;甚是想念&#xff0c;我是辣条&#xff0c;我又回来啦&#xff0c;兄弟们&#xff0c;一别两年&#xff0c;还有多少老哥们在呢&#xff1f; 目录 一年半没更文我干啥去了&#xff1f; AI大模型火了 人工智能 大模型的理解 为什么学习…

【Python】 Python中__slots__的妙用:提升性能与内存管理

基本原理 在Python中&#xff0c;每个类默认都会继承自object类&#xff0c;而object类在Python中是一个动态类&#xff0c;允许动态地添加属性和方法。这种灵活性使得Python在某些情况下非常强大和灵活&#xff0c;但同时也带来了一些性能和内存使用上的开销。 为了解决这个…

简化跨网文件传输摆渡过程,降低IT人员工作量

在当今数字化时代&#xff0c;IT企业面临着日益增长的数据交换需求。随着网络安全威胁的不断演变&#xff0c;网关隔离成为了保护企业内部网络不受外部威胁的重要手段。然而&#xff0c;隔离的同时&#xff0c;企业也需要在不同网络间安全、高效地传输文件&#xff0c;这就催生…

ubuntu strace命令

strace 是 Linux 系统中的一个调试工具&#xff0c;用于跟踪并记录系统调用&#xff08;system calls&#xff09;和信号&#xff08;signals&#xff09;。在 Ubuntu 中&#xff0c;strace 命令可以帮助开发者和系统管理员了解一个程序在运行时如何与操作系统内核进行交互&…

渗透测试工具Cobalt strike-1.CS介绍与配置

Cobalt Strike是一款美国Red Team开发的渗透测试神器&#xff0c;常被业界人称为CS。最近这个工具大火&#xff0c;成为了渗透测试中不可缺少的利器。其拥有多种协议主机上线方式&#xff0c;集成了提权&#xff0c;凭据导出&#xff0c;端口转发&#xff0c;socket代理&#x…

骨折分类数据集1129张10类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;1129 分类类别数&#xff1a;10 类别名称:["avulsion_fracture",…

使用 RT 矩阵进行 3D 点云变换详解(基于 PCL 和 Eigen 库)

在 3D 点云处理中&#xff0c;RT 矩阵是一个常用的工具&#xff0c;用于对点云进行旋转和平移操作。本文将详细介绍 RT 矩阵的概念&#xff0c;并通过一个示例程序演示如何基于 PCL 和 Eigen 库将一帧点云进行矩阵变换再输出。 本教程的示例代码和点云数据可在 GitHub 下载。 什…

100个 Unity小游戏系列六 -Unity 抽奖游戏专题四 翻卡游戏

一、演示效果 二、知识点讲解 2.1 布局 void CreateItems(){reward_data_list reward_data_list ?? new List<RewardData>();reward_data_list.Clear();for (int i 0; i < ItemCount; i){GameObject item;if (i 1 < itemParent.childCount){item itemParent…

垂类短视频:四川鑫悦里文化传媒有限公司

垂类短视频&#xff1a;内容细分下的新媒体力量 随着移动互联网的迅猛发展和智能手机的普及&#xff0c;短视频已成为当下最受欢迎的媒介形式之一。四川鑫悦里文化传媒有限公司而在短视频领域&#xff0c;一个新兴的概念——“垂类短视频”正逐渐崭露头角&#xff0c;以其独特…

⌈ 传知代码 ⌋ 高速公路车辆速度检测软件

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

WMS仓库管理系统是怎么操作的?WMS操作流程详解

WMS 是仓库管理系统(Warehouse Management System) 的缩写。通过标准化的来料管理、拣配管理、仓库管理&#xff0c;打造实时化、透明化、可视化的仓储管理体系。一款合格的wms系统具有以下优势 提供实时可视性和自动化仓储流程&#xff0c;帮助企业更好地应对复杂的供应链网络…

python fstring教程(f-string教程)(python3.6+格式化字符串方法)

文章目录 Python F-String 教程&#xff1a;深度探究与实用指南引言基础用法什么是F-String?表达式嵌入 格式化选项小数点精度宽度与对齐数字格式化 高级用法复杂表达式调用函数多行F-String嵌套格式化 总结 Python F-String 教程&#xff1a;深度探究与实用指南 引言 在Pyt…

AI赋能:人工智能技术驱动下的品牌海外市场精准分析与营销策略

随着全球化的加速和科技的飞速发展&#xff0c;品牌在海外市场的竞争愈发激烈。为了在竞争激烈的国际市场中脱颖而出&#xff0c;品牌需要更深入地了解海外消费者的行为、趋势和偏好。在这个过程中&#xff0c;人工智能&#xff08;AI&#xff09;技术以其强大的数据处理和分析…

闲话 .NET(6):.NET Core 各个版本的特性

前言 之前我们聊了一下 .NET Core 有哪些优势&#xff0c;.NET Core 发展非常迅速&#xff0c;不过短短几年&#xff0c;.NET Core 已经发布 .NET 8 了&#xff0c;基本上保持了一年一个版本的速度&#xff0c;每个版本都有自己的独有特性&#xff0c;下面我们来简单的盘点一下…