创建个人网站(二)前端主页设计和编写一(太阳移动)

前言

以下内容纯纯当乐子来看就行,知识分享一下这样设计的原因,想看正文直接见下一节
为什么创建个人网站一之后几天没有动静了呢,一个是家里有事实在比较忙,第二个原因是没想到主页要设计成什么样,知道前两天问我姐什么样的主页比较炫酷,我们得出的结论是也许有层次感的会很不错,我想起了之前看到的wallpaperengine的壁纸,有个随时间变化的壁纸我觉得很棒,那不如就以这个为参考,因为我的博客不需要太多模块,只要让主页变成一个内容入口就行了,搞得月花里胡哨越好,就在昨天我看到了一个codepen用的是svg制作的一个按钮,我觉得可以用svg做一个动画,目前准备先搞一个随滚轮移动的太阳。

太阳

svg绘制

首先我们需要一个svg的圆,然后用svg自带的线性渐变绘制太阳的颜色,如下图所示

<template><div style="height: 100%"><svg width="100%" height="700px" preserveAspectRatio="none"><defs><!-- 滤镜和渐变都放在这里 --><linearGradient id="sun" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="5%" style="stop-color: rgb(255, 55, 0)" /><stop offset="90%" style="stop-color: rgb(255, 153, 0)" /></linearGradient></defs><circleref="sun":cx="cxPercentage":cy="cyPercentage":r="rPercentage"style="fill: url(#sun)"></circle></svg></div>
</template>

在这里插入图片描述

制作动画

制作动画的代码参考的是以前写的那篇Canvas小练习之随机色彩变化里面的动画的的使用

<script setup>
import { ref, computed } from "vue";const cx = ref(5); // x初始值
const cy = ref(80); // y初始值
const r = ref(4); // 半径
const timer = ref(null);// 计算相对于SVG宽度和高度的百分比值
const cxPercentage = computed(() => `${cx.value}%`);
const cyPercentage = computed(() => `${cy.value}%`);
const rPercentage = computed(() => `${r.value}%`);// 日出
const sunRise = () => {if (cx.value < 95) {cx.value++;cy.value = 80 - Math.sqrt(45 * 45 - Math.pow(cx.value - 50, 2));return true;} else {return false;}
};// 日落
const sunSet = () => {if (cx.value > 5) {cx.value--;cy.value = 80 - Math.sqrt(45 * 45 - Math.pow(cx.value - 50, 2));return true;} else {return false;}
};const animate = (isDown, count = 0) => {if (isDown) {if (count < 90) {if (!sunRise(count)) {window.cancelAnimationFrame(timer.value);return;}} else {window.cancelAnimationFrame(timer.value);return;}} else {if (count < 90) {if (!sunSet(count)) {window.cancelAnimationFrame(timer.value);return;}} else {window.cancelAnimationFrame(timer.value);return;}}timer.value = window.requestAnimationFrame(() => {animate(isDown, count + 1);}); 
};window.addEventListener("wheel", (event) => {// console.log(event);if (event.deltaY > 0) {console.log("down");animate(true);} else if (event.deltaY < 0) {console.log("up");animate(false);}
});
</script>

请添加图片描述

js代码讲解

其实很简单就能实现,很容易看出来,它只是画了一个半圆,只有两个稍微有点复杂的东西

  1. 使用动画
  2. 计算路径

动画

timer.value = window.requestAnimationFrame(() => {
animate(isDown, count + 1);
});
这个是用来逐帧执行animate函数,但其实这个没有作多浏览器内核的适配,以后再说吧
只要记得把这个timer清除即可

计算路径

计算路径其实也很简单,viewport的坐标轴左上角是原点,x坐标轴是向右递增的,y坐标轴是向下递增的,我给圆的初始位置是(5,80),也就可以轻松的得到轨迹路径
( x − 50 ) 2 + ( y − 80 ) 2 = 4 5 2 (x-50)^2+(y-80)^2 = 45^2 (x50)2+(y80)2=452
我们只要下半圆,所以得到y的值就是
y = 80 − 4 5 2 − ( x − 50 ) 2 y = 80-\sqrt{45^2-(x-50)^2} y=80452(x50)2
变成代码就是

cy.value = 80 - Math.sqrt(45 * 45 - Math.pow(cx.value - 50, 2));

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

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

相关文章

基于“Galera+MariaDB”搭建多主数据库集群的实例

1、什么是多主数据库集群 多主数据库集群是一种数据库集群架构&#xff0c;每个节点都可以接收写入操作和读取操作&#xff0c;并且通过心跳机制同步数据&#xff0c;保证数据一致性和高可用性。因多主数据库集群每个节点都可以承担读写操作&#xff0c;因此它可以充分利用各个…

【兔子王赠书第13期】AI绘画实战:Midjourney从新手到高手

文章目录 写在前面AI绘画推荐图书一本书读懂AI绘画关键点内容简介作者简介 推荐理由粉丝福利写在后面 写在前面 如今AI技术已经进入了我们的日常学习生活中&#xff0c;如何用一本书轻松玩转AI绘画&#xff0c;领略无限艺术可能呢&#xff1f; AI绘画 AI绘画是指利用人工智能…

基于SSM的马病管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

yolov5障碍物识别-雪糕筒识别(代码+教程)

简介 这是一个检测交通锥并识别颜色的项目。我使用 yolov5 来训练和检测视锥细胞。此外&#xff0c;我使用 k 均值来确定主色&#xff0c;以对锥体颜色进行分类。目前&#xff0c;支持的颜色为红色、黄色、绿色和蓝色。其他颜色被归类为未知。 数据集和注释 我使用了一个自收…

定位咨询:企业市场竞争中的定海神针

什么是定位咨询?定位咨询能给企业带来什么帮助?在现代市场的激烈竞争中&#xff0c;定位咨询不仅是企业区分自己的重要工具&#xff0c;更是它们赢得市场份额的关键。以下是定位咨询的定义和几个核心方面&#xff0c;笔者将列举具体案例说明其重要性和实用性。 定位咨询的简单…

【JUC】三十一、AQS源码

&#x1f4d5;前置笔记&#xff1a;【AQS核心概念与核心类】 文章目录 1、ReentrantLock与AQS类的联系2、lock方法3、acquire方法4、源码分析Demo背景案例5、tryAcquire方法6、addWaiter方法7、acquireQueued方法8、unlock方法9、cancelAcquire方法 AQS是JUC的基石&#xff0c;…

自动化测试流程(超详细整理)

最近很多小伙伴问我自动化测试到底该怎么做&#xff1f;流程是什么样的&#xff1f;在每个阶段都需要注意什么&#xff1f;本文也就主要从自动化测试的基本流程入手&#xff0c;对面试自动化测试工程师的同学会有不少帮助。对于在职的朋友&#xff0c;也可以参考此流程&#xf…

15 使用v-model绑定单选框

概述 使用v-model绑定单选框也比较常见&#xff0c;比如性别&#xff0c;要么是男&#xff0c;要么是女。比如单选题&#xff0c;给出多个选择&#xff0c;但是只能选择其中的一个。 在本节课中&#xff0c;我们演示一下这两种常见的用法。 基本用法 我们创建src/component…

继电器的工作原理及驱动电路

继电器是具有隔离功能的自动开关元件&#xff0c;广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电了设备中&#xff0c;是最重要的控制元件之一。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。…

高级桌面编程(二)

一、前言 文章的续作前文是&#xff1a; 高级桌面编程&#xff08;一&#xff09;-CSDN博客https://blog.csdn.net/qq_71897293/article/details/135072204?spm1001.2014.3001.5502 二、自定义控件 1创建自定义控件&#xff0c;如下图所示&#xff1a; 2 在创建的页面可以…

葡萄酒的主要区别只在于葡萄本身吗?

谈到葡萄酒&#xff0c;许多人认为选择最喜欢的葡萄酒只是简单地挑选一种颜色:红色或白色。红色和白色的区别是选择葡萄酒的一个很好的起点&#xff0c;但这仅仅是一个起点。要真正享受葡萄酒的体验&#xff0c;你应该深入了解自己。 如果你已经知道你喜欢白葡萄酒&#xff0c;…

25 redis 中 cluster 集群的工作模式

前言 我们这里首先来看 redis 这边实现比较复杂的 cluster集群模式 整个 cluster集群 中会包含多对 MasterSlave 的组合, 然后这多对 MasterSlave 来分解 16384 个 slot 然后 客户端这边 set, get 的时候, 先根据 key 计算对应存储的 slot, 然后 服务器这边响应 MOVED 目标…