七夕节,我用代码制作了表白信封

news2025/7/19 11:05:45

大家好,我是小周,明天就是七夕了,这么浪漫的节日,自然少不了我这个浪漫博主,本次为大家贡献表白信封的制作,其他的就看缘分啦,哈哈,最后会放上资源包,需要的小伙伴自取就可以了,999

文章目录

  • 一、画信封
  • 二、结构搭建
  • 三、HTML结构
  • 四、CSS美化
  • 五、JS注入灵魂
  • 六、媒体查询,兼容移动端,拿捏
  • 七、发送,直接恋爱
  • 八、源码下载

一、画信封

https://excalidraw.com/

使用上面的画图工具,手绘信封,可自己发挥,工具上手简单也很不错

图1:未打开的信封

在这里插入图片描述

图2:快要打开的信封

在这里插入图片描述

图3:打开的信封

在这里插入图片描述

二、结构搭建

这是整个项目的结构,其中都标注了是干嘛的,清晰明了

在这里插入图片描述

三、HTML结构

很简单,使用一个大盒子包裹所有内容,包括图片,文字

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小刘 -> 小张</title>
    <link rel="shortcut icon" href="./icon/icon.png" type="image/x-icon">
    <link rel="stylesheet" href="./css/index.css">
</head>

<body>
    <div class="con">
        <img src="./images/1.png" class="close" draggable="false">
        <img src="./images/花.png" class="rose" draggable="false">
        <h1>写给亲爱的郁苗小姐</h1>
        <span>2022-8-4</span>
    </div>

    <audio src="./audio/click.mp3" class="clickMusic"></audio>
    <audio src="./audio/ADG - 我 去 宇 宙 偷 星 星,放 在 夜 里 等 你♡.mp3" class="bgMusic"></audio>

    <script src="./js/main.js"></script>
</body>

</html>

在这里插入图片描述

四、CSS美化

关键注释已经写在代码中,使用了定义con相对于body定位,con内元素相对于con定位,不会乱,同时使用flex布局减少居中相关代码

/* 清除默认样式 */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

/* 给body相对定位,让con以body为标准进行定位 */
body {
    position: relative;
    /* 设置最小高度为一整个视口的高度 */
    min-height: 100vh;

}

/* 使用绝对定位,相对于body定位,居中
同时开启 flex布局,默认x轴为主轴,使用
justify-content: center;即x轴居中 */
.con {
    position: absolute;
    bottom: 150px;
    width: 500px;
    left: 50%;
    transform: translateX(-50%);
    display: flex;
    justify-content: center;

}

.con .close {
    position: absolute;
    bottom: 0px;
    width: 100%;
}

.con .rose {
    position: absolute;
    bottom: 70px;
    width: 50px;
    height: 50px;
    /* 玫瑰是要点的,设置鼠标样式为小手 */
    cursor: pointer;
}

.con h1 {
    position: absolute;
    bottom: 170px;
    font-size: 18px;
    color: #444;
}

.con span {
    position: absolute;
    bottom: 140px;
    font-size: 14px;
    color: #666;
}

/* 清除audio可能的占位问题 */
audio {
    width: 0;
    height: 0;
}

以下是简单美化后的效果:

在这里插入图片描述

五、JS注入灵魂

js也不难,获取节点,操作节点,使用定时器的时间差来模仿定格动画,达到开信封的效果,是不是很棒呢?注释已经写好了,如果你的基础差,看着注释也能明白哦

// 获取闭合信封的图片节点
let img1 = document.querySelector(".close");

// 获取h1和span文字节点
let h1 = document.querySelector("h1");
let span = document.querySelector("span");

// 获取点击音效
let clickMusic = document.querySelector(".clickMusic");
// 获取背景音乐
let bgMusic = document.querySelector(".bgMusic");
// 获取玫瑰,后面添加点击事件
let rose = document.querySelector(".rose");

// 添加点击事件
rose.addEventListener("click", function () {
    // 先隐藏h1和span
    h1.style.display = "none";
    span.style.display = "none";
    setTimeout(function () {
        // 播放拆信封的音效
        clickMusic.play();
        // 200毫秒后切换信封为第二张
        img1.src = "./images/2.png";
    }, 200);
    setTimeout(function () {
        // 800毫秒后切换信封为第三张
        img1.src = "./images/3.png";
        // 播放背景音乐
        bgMusic.play();
    }, 800);
})

六、媒体查询,兼容移动端,拿捏

使用简单媒体查询,处理一下不同像素下的样式,小伙伴可以根据自己情况优化,我这里提供一下思路。

/* 媒体查询,简单兼容手机端,起飞 */
@media screen and (max-width: 540px) {
    .con {
        width: 100vw;
    }

    .con .rose {
        bottom: 60px;
    }

    .con h1 {
        bottom: 150px;
    }

    .con span {
        bottom: 120px;
    }
}

七、发送,直接恋爱

最后希望大家不要为了谈恋爱而谈恋爱❤️,在没有遇到真心喜欢的她他之前,充实自己,对自己好点,加油学技术,如果觉得博主说的不错,记得点赞支持博主呀,我是小周,期待你的关注!👋

八、源码下载

https://wwb.lanzouj.com/iJ7gH08yaw1g


在这里插入图片描述

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

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

相关文章

Nginx反向代理WebSocket服务连接报错:WebSocket connection to “wss://xxx/xxx“ failed

最近使用 node.js 搭建 WebSocket 服务&#xff0c;在本地测试 connection 都是正常&#xff0c;于是部署到 Linux 服务上&#xff0c;需要用 Nginx 来反向代理 WebSocket 服务。浏览器控制台报错&#xff1a;WebSocket connection to wss://tiven.cn/ws/xxx failed:&#xff0…

学会iframe并用其解决跨域问题

了解iframe 官方定义为&#xff1a;iframe是HTML标签&#xff0c;作用是文档中的文档&#xff0c;或者浮动的框架(FRAME)。iframe元素会创建包含另外一个文档的内联框架&#xff08;即行内框架&#xff09;。 简单理解为&#xff1a;iframe是一个内联框架&#xff0c;可以在当…

ES6 --- 解构赋值(数组,对象,函数)使用详解

解构赋值 JavaScript 中最常用的两种数据结构是 Object 和 Array。 对象让我们能够创建通过键来存储数据项的单个实体。数组则让我们能够将数据收集到一个有序的集合中。 但是&#xff0c;当我们把它们传递给函数时&#xff0c;函数可能不需要整个对象/数组。它可能只需要对…

[Vue warn]: Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘$refs‘)

报错&#xff1a;[Vue warn]: Error in v-on handler: "TypeError: Cannot read properties of undefined (reading $refs)" 背景&#xff1a;1.在做vue项目时&#xff0c;在功能弹框中&#xff0c;想实现新增内容。 2. 报错原因是要触发menuCheckall组件后&#xff…

background-image使用

目录 background-image: url(" ")&#xff1b; background-repeat属性&#xff08;背景平铺&#xff09; background-size属性&#xff08;设置背景图片大小&#xff09; background-position属性&#xff08;背景图片位置&#xff09; 1.background-image: url…

Vue中 Vue-Baidu-Map基本使用

前言 但我们遇到一项新技术或者没有写过的东西为了不走弯路我们只能先去模仿或者看官方文档 Vue这个框架相信大家都熟悉&#xff0c;只要是需要用的第三方平台它一般都会进行集成&#xff0c;比如Vue-Baidu-map 为什么有百度原生api为什么还需要插件&#xff0c;因为使用插件…

ref 引用(vue获取DOM元素)

ref 引用 jquery 牛逼 简化了程序员操作DOM的过程 vue 优势&#xff1a; MVVM 在 vue 中&#xff0c;程序员不需要操作DOM。只需要把数据维护好&#xff01;(数据驱动视图) 结论&#xff1a;在 vue 项目&#xff0c;强烈不建议大家安装和使用jQuery&#xff01;&#xff01;&am…

CORS错误是什么如何解决?

通过http://localhost访问服务端时,出现CROS错误是什么问题该如何解决呢? 发生ajax跨域问题的原因&#xff1a;(三个原因同时满足才可能产生跨域问题) (1)浏览器限制 发生ajax跨域的问题的时候后端是正常执行的&#xff0c;从后台打印的日志可以看出&#xff0c;而且后台也会…

前端布局小案例,如何创建漂亮的毛玻璃输入表单卡片效果

在当今互联网时代&#xff0c;用户体验是至关重要的。当我们在设计网站或应用程序时&#xff0c;一个漂亮、吸引人的界面往往是吸引用户并提高用户满意度的关键因素之一。而一个好看的表单则可以提高用户提交的意愿和效率。本文将介绍如何使用HTML和CSS创建一个漂亮的毛玻璃输入…

vue3 响应式对象的 api 详解

文章目录Ⅰ. ref、reactive ( 递归监听 )Ⅱ. isRef、isReactive ( 判断 )Ⅲ. toRef 和 toRefs ( 解构 )Ⅳ. toRaw 、 markRaw ( 解除代理)Ⅴ. unref ( 拷贝 )Ⅵ. shallowRef 、shallowReactive&#xff08; 非递归监听 &#xff09;Ⅶ. triggerRef &#xff08;强制更新&#x…

使用小程序制作一个老照片修复工具,让追忆时光触手可及

一、文章前言二、准备流程三、开发步骤四、完整代码一、文章前言 此文主要通过小程序来制作一个照片修复工具,实现黑白图片上色及图像效果增强等功能。 二、准备流程 2.1、注册百度开放平台及微信公众平台账号。 2.2、下载及安装微信Web开发者工具。 2.3、如需通过SDK调用及需…

LVGL V8应用——通过按键切换页面

一、按键切换对象 程序 全局变量 static lv_obj_t *contanier1 NULL; static lv_obj_t *contanier2 NULL;按钮对应回调函数&#xff0c;实现容器的切换 static void win_btn_event_callback1(lv_event_t* e) {lv_event_code_t code lv_event_get_code(e);if (code LV_EVE…

猿创征文|前端到全栈,一名 IT 初学者的学习与成长之路

目录导读写在前面创作之路❤ 前端开发工程师知识体系❤ Vue&React 开发框架❤ 前端开发实战❤ Linux&云原生小马技术栈❤ 主打技术专栏❤ 其他专栏(实用干货)❤ 技术栈词云学习与成长总结写在前面 2021 年 7 月 18 日我在 CSDN 发布了第一篇技术文章&#xff0c;距现在…

如何用html制作一个简单的网页

哈喽&#xff0c;大家好&#xff01;我是小张。大家在浏览网页的时候有没有好奇过这个网页是怎么制作&#xff0c;其实只是制作一个简单的网页是很简单的。今天我就教一下大家如何用HTML制作一个简单的网页。 了解html 1. 学习html之前先要知道html是什么 HTML的全称为超文本标…

查看Chrome浏览器版本及下载对应的webdriver,并下载安装

查看Chrome浏览器版本及下载对应的webdriver&#xff0c;并下载 文章目录查看Chrome浏览器版本及下载对应的webdriver&#xff0c;并下载一&#xff0c;查看自己电脑的Chrome的版本二&#xff0c;webdriver的对应版本三&#xff0c;安装一&#xff0c;查看自己电脑的Chrome的版…

nvm介绍、安装、报错处理以及使用

前言 工作中我们偶尔可能同时在进行多个项目开发&#xff0c;而多个不同的项目所使用的 node 版本又是不一样的&#xff0c;在这种情况下&#xff0c;对于维护多个版本的node 将会是一件非常麻烦的事情&#xff0c;因为需要操作做卸载安装操作&#xff0c;而nvm 就是为解决这个…

关于Vue3的defineProps用法

之前只是单纯的会用&#xff0c;因为vue关于父子组件通讯差别有一点点大。 1.在父组件内传递变量的时候&#xff0c;需要加冒号:&#xff0c;否则你就只是单纯的传递了一个字符串而已。 2.在子组件里不需要引入defineProps就可调用该函数去接收父组件传来的属性。 我个人在这里…

axios基本使用及跨域问题详解

前端请求自然也发展迅速&#xff0c;从原生的XHR到jquery ajax&#xff0c;再到现在的axios和fetch。axios&#xff08; https://axios-http.com/zh/ &#xff09;是Vue推荐的http库&#xff0c;这个还是要了解一点的。 安装 $ npm install axios基本使用的例子 1、在main.j…

Vue项目:学生管理系统

&#x1f482; 个人主页: 陶然同学&#x1f91f; 版权: 本文由【陶然同学】原创、在CSDN首发、需要转载请联系博主&#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦&#x1f485; 想寻找共同成长的小伙伴&#xff0c;请点击【Java全栈开发社区】…

Nginx的安装配置教程

一、Nginx的下载与安装 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好 1.下载 在Nginx的官网的下载页面…