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

本文主要是介绍创建个人网站(二)前端主页设计和编写一(太阳移动),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

以下内容纯纯当乐子来看就行,知识分享一下这样设计的原因,想看正文直接见下一节
为什么创建个人网站一之后几天没有动静了呢,一个是家里有事实在比较忙,第二个原因是没想到主页要设计成什么样,知道前两天问我姐什么样的主页比较炫酷,我们得出的结论是也许有层次感的会很不错,我想起了之前看到的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.chinasem.cn/article/514469

相关文章

python如何创建等差数列

《python如何创建等差数列》:本文主要介绍python如何创建等差数列的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python创建等差数列例题运行代码回车输出结果总结python创建等差数列import numpy as np x=int(in

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

怎么用idea创建一个SpringBoot项目

《怎么用idea创建一个SpringBoot项目》本文介绍了在IDEA中创建SpringBoot项目的步骤,包括环境准备(JDK1.8+、Maven3.2.5+)、使用SpringInitializr... 目录如何在idea中创建一个SpringBoot项目环境准备1.1打开IDEA,点击New新建一个项

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.