用技术创意,定制专属祝福
引言
在这个数字化时代,传统的贺卡已经逐渐被电子贺卡所取代。而如果想要给对方送上一份特别的祝福,何不动手制作一张个性化的电子贺卡呢?今天,就让我们一起来探讨如何使用HTML、CSS和JavaScript来打造一张别具一格的电子贺卡吧!
贺卡未展开效果:
贺卡展开效果:
HTML部分
首先,让我们来看看HTML部分。在DIY贺卡中,HTML扮演着承载结构和内容的重要角色。我们需要创建一个电子所需元素的基本布局。这包括贺卡的四个面、贺词以及图片等。确保每个元素都有清晰的命名和结构,为后续的样式和功能提供良好的基础。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>生日贺卡</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="book p3d">
<audio id="j-bgm" src="./happy_birthday.mp3"></audio>
<!-- 右半本书 -->
<div class="book-cover p3d">
<!-- 外页 -->
<div class="page bake flip"></div>
<!-- 内页 -->
<div class="page front p3d">
<!-- 图片阴影 -->
<div class="shadow"></div>
<!-- 蛋糕图片 -->
<div class="pic"></div>
</div>
</div>
<!-- 左半本书 -->
<div class="front-cover p3d">
<!-- 内页 -->
<div class="page front flip p3d">
<p>
亲爱的[收件人的名字],<br><br>
在这特别的一天,我想向你送上最诚挚的祝福!生日快乐!愿你在新的一岁里,充满快乐、健康、幸福和成功。
不论是风和日丽的阳光,还是细雨飘飘的夜晚,愿你都能感受到生活的美好和温暖。愿你的心中永远充满希望和正能量,笑容永远灿烂如花。
感谢你在我生活中的陪伴和支持,希望我们的友谊能像阳光一样灿烂耀眼,无悔青春,共同成长。
祝你生日快乐!<br><br>
[您的名字] 敬上
</p>
</div>
<!-- 外页 -->
<div class="page back"></div>
</div>
</div>
<script src="index.js"></script>
</body>
</html>
CSS部分
接下来,让我们来谈谈CSS部分。通过CSS,我们可以为贺卡添加样式,使其看起来更加美观和独特。你可以选择不同的颜色、背景和布局来个性化你的贺卡,让整个贺卡更具时尚感和活力。记得保持样式的一致性,让贺卡看起来更加专业和精致。
页面全局配置
* {
margin: 0;
padding: 0;
border: 0;
block-size: border-box;
}
html {
height: 100%;
}
body {
height: 100%;
font: 100%/1.25 Helvetica, arial, helvetica;
/* 字体颜色 */
color: rgb(89, 185, 158);
/* 透视效果的属性,定义了观察者与 z=0 平面的距离 */
perspective: 1000px;
/* 从顶部(#444 颜色)开始向底部(#999 颜色)逐渐变化,形成一个垂直的渐变效果 */
background: linear-gradient(to bottom, #444, #999);
}
设置贺卡整体样式
.book {
width: 300px;
height: 300px;
position: absolute;
top: 30%;
left: 50%;
/* 将鼠标光标改变为手型指针 */
cursor: pointer;
/* 禁止用户选择页面上的文本 */
user-select: none;
/*往里倾斜*/
transform: rotateX(30deg);
}
/* 3d效果 */
.p3d {
transform-style: preserve-3d;
}
设置贺卡的大小、利用绝对定位将贺卡定到合适的位置,并使用transform: rotateX(30deg)
将贺卡向里倾斜30°,打造立体效果。
设置贺卡四页相同样式
.page {
width: 300px;
height: 300px;
/* 相对长度单位,等同于元素字体大小的倍数 */
padding: 1em;
position: absolute;
left: 0;
top: 0;
}
position: absolute;left: 0;top: 0;
将四个面都通过绝对定位都定在父容器的左上角,使四面重叠。
设置贺卡内页、外页基础样式
/* 贺卡的内页 */
.front {
background-color: rgb(209, 230, 239);
}
/* 贺卡的外页 */
.back {
background-color: #fff;
}
设置旋转基点
/* 贺卡的左页 */
.front-cover {
/* 旋转基点 */
transform-origin: 0 50%;
}
利用transform-origin: 0 50%
设置贺卡左页的旋转基点,便于之后贺卡向左翻开
设置贺卡封面
你可以将background-image
中的图片地址换为你喜欢的图片,并通过background-position
来移动图片位置达到心仪的效果。
.front-cover .back {
background-image: url(./card.jpg);
/* 确保整个元素背景完全被填充 */
background-size: cover;
background-position: -50px 0;
transform: translateZ(3px);
}
利用transform: translateZ(3px)
在3D空间中通过Z轴平移产生一个视觉上的转换效果。
字体翻转
.flip {
transform: rotateY(180deg);
}
由于贺词写在贺卡的左内页,为了防止贺词在贺卡翻开后出现字体翻转,我们需要将贺卡左内页提前在X轴上翻转180°。
未翻转前
效果:
设置贺卡右内侧
.shadow,
.pic {
width: 196px;
height: 132px;
position: absolute;
left: 60px;
top: 60px;
transform-origin: 0 100%;
}
.pic {
background-image: url(./cake.png);
background-size: cover;
}
.shadow {
background-image: url(./cake_shadow.png);
background-size: cover;
}
position: absolute;
通过绝对定位将蛋糕图片以及蛋糕阴影定在右内侧合适位置transform-origin: 0 100%;
设置旋转基点为图片左下方,便于之后翻转
JS部分
最后,我们来到JavaScript部分。JavaScript将赋予贺卡翻转功能,并让它在完全打开后播放音乐。
// 获取元素
// 贺卡左页
var page = document.querySelector('.front-cover');
// 蛋糕
var pic = document.querySelector('.pic');
// 阴影
var shadow = document.querySelector('.shadow');
// 背景音乐
var bgMusic = document.getElementById('j-bgm');
// 求中间值
var clamp = function (val, min, max) {
if (val > max) return max;
if (val < min) return min;
return val;
}
// 鼠标按下
window.addEventListener('mousedown', () => {
//鼠标移动
window.addEventListener('mousemove', handleMouseMove)
// 鼠标抬起
window.addEventListener('mouseup', () => {
window.removeEventListener('mousemove', handleMouseMove);
});
});
function handleMouseMove(e) {
var angle = clamp((window.innerWidth / 2 - e.pageX + 300) / 300 * -90, -180, 0);
// 翻开贺卡
page.style.transform = `rotateY(${angle}deg)`;
// 蛋糕翻转
pic.style.transform = `rotateX(${angle / 3}deg)`;
// 蛋糕阴影倾斜
shadow.style.transform = `skew(${angle / 7}deg)`;
// 音乐控制
angle === -180 ? bgMusic.play() : bgMusic.pause();
}
通过事件监听器实现了一个交互效果,当用户按下鼠标并移动时,页面中的元素会根据鼠标位置进行旋转和倾斜,并播放背景音乐。
结语
通过HTML、CSS和JavaScript的结合,我们可以轻松地打造一张个性化且有趣的电子贺卡,让祝福更加特别!希望这篇文章对你有所帮助,也期待看到你设计出的别具一格的电子贺卡!Happy coding!今天的内容就到这里了。如果你觉得这篇文章有帮助或有所启发,别忘了给我一个鼓励的赞哦!
转载自:https://juejin.cn/post/7361618046597021696