上一节我们详细讲解了表单的验证,包括信息验证、本地存储和动态渲染,本节我们将学习如何通过JS操作DOM实现元素的显示与隐藏、淡入淡出效果、滑动效果和动画效果。下面是针对每个效果的具体实现方法:
1. 元素的显示和隐藏。
显示元素:设置元素的style.display属性为"block"、"inline"或其他合适的值。例如:element.style.display = "block";
隐藏元素:设置元素的style.display属性为"none"。例如:element.style.display = "none";
有一种广告,它会先挂出来一会,然后30s后自动消失,不知道读者遇到过没有。我们也可以做一个这样的广告,通过元素的隐藏和一次性定时器来做。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dotcpp</title>
<style>
.advertisement {
width: 500px;
height: 300px;
margin: 200px auto;
border: 1px solid #000;
padding: 50px 100px;
}
</style>
</head>
<body>
<div class="advertisement">
<h1>Dotcpp编程</h1>
<p>我是广告,但是你不用担心,因为我5s后自动隐藏</p>
</div>
</body>
<script>
const advertisement=document.querySelector('.advertisement')//获取广告盒子
/* 设置定时器 */
setTimeout(() => {
advertisement.style.display='none'
}, 5000);
</script>
</html>2. JS动态更改元素的透明度:
我们可以通过点击事件来触发两个盒子的透明度,从而实现淡入淡出的效果,此处需要在盒子的CSS上加“transition: opacity 0.5s;”这个会对透明度进行过渡。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>淡入淡出效果</title>
<style>
.fade-box {
width: 300px;
height: 150px;
margin: 50px auto;
background: lightblue;
display: flex;
align-items: center;
justify-content: center;
opacity: 1;
transition: opacity 0.5s;
}
button {
padding: 10px 20px;
margin: 10px;
}
</style>
</head>
<body>
<div style="text-align: center;">
<button onclick="fadeOut()">淡出</button>
<button onclick="fadeIn()">淡入</button>
</div>
<div id="fadeBox" class="fade-box">
淡入淡出效果演示
</div>
</body>
<script>
const fadeBox = document.getElementById('fadeBox');
function fadeOut() {
fadeBox.style.opacity = '0';
}
function fadeIn() {
fadeBox.style.opacity = '1';
}
</script>
</html>3. JS实现盒子滑动的效果:
通过DOM获取元素,然后调整盒子的高度,从而实现拉窗帘的滑动效果。此处当然也需要进行transition过渡(transition: height 0.5s;)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>滑动效果</title>
<style>
.slide-box {
width: 300px;
height: 0;
margin: 50px auto;
background: lightgreen;
overflow: hidden;
transition: height 0.5s;
}
.slide-content {
padding: 20px;
}
button {
padding: 10px 20px;
margin: 10px;
}
</style>
</head>
<body>
<div style="text-align: center;">
<button onclick="slideDown()">向下滑动</button>
<button onclick="slideUp()">向上滑动</button>
</div>
<div id="slideBox" class="slide-box">
<div class="slide-content">
滑动效果演示内容<br>
拉窗帘滑动效果
</div>
</div>
</body>
<script>
const slideBox = document.getElementById('slideBox');
let isOpen = false;
function slideDown() {
slideBox.style.height = '150px';
isOpen = true;
}
function slideUp() {
slideBox.style.height = '0';
isOpen = false;
}
</script>
</html>4. JS实现元素的动画效果:
首先准备4个动画(分别是滑入、弹跳、旋转和停止),再准备4个按钮和一个绿色盒子,通过点击事件触发绿色盒子的动画,主要是通过remove()移除类名和add()添加类名来实现动画的切换。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>动画效果</title>
<style>
.animate-box {
width: 100px;
height: 100px;
margin: 50px auto;
background: greenyellow;
display: flex;
align-items: center;
justify-content: center;
color: white;
}
@keyframes slide-in {
0% { transform: translateX(-100px); opacity: 0; }
100% { transform: translateX(0); opacity: 1; }
}
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-20px); }
}
@keyframes rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
.slide-in { animation: slide-in 1s ease-out; }
.bounce { animation: bounce 0.5s ease-in-out 2; }
.rotate { animation: rotate 2s linear infinite; }
button {
padding: 10px 20px;
margin: 10px;
}
</style>
</head>
<body>
<div style="text-align: center;">
<button onclick="playSlide()">滑入动画</button>
<button onclick="playBounce()">弹跳动画</button>
<button onclick="playRotate()">旋转动画</button>
<button onclick="stopAnimation()">停止动画</button>
</div>
<div id="animateBox" class="animate-box">
动画效果
</div>
</body>
<script>
const animateBox = document.getElementById('animateBox');
function playSlide() {
resetAnimation();
animateBox.classList.add('slide-in');
}
function playBounce() {
resetAnimation();
animateBox.classList.add('bounce');
}
function playRotate() {
resetAnimation();
animateBox.classList.add('rotate');
}
function stopAnimation() {
resetAnimation();
}
/* 重载动画 */
function resetAnimation() {
animateBox.classList.remove('slide-in', 'bounce', 'rotate');
}
</script>
</html>总结:通过JS操作DOM动态实现元素的显示与隐藏、淡入淡出效果、滑动效果和动画效果,可以为网页增加丰富的交互体验。
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程