第十六讲 JavaScript与CSS交互

本文介绍了JavaScript如何与CSS进行交互,包括通过style属性修改样式、隐藏和显示元素、切换className以及实现拖拽事件。提供了四个实践案例,涉及背景颜色改变、文本隐藏显示、列表项样式切换和元素拖放功能。同时给出了两个课堂作业,分别是输入验证和颜色变化动画的实现,旨在巩固所学知识。

系列课程目录

第十六讲 JavaScript与CSS交互



前言

JavaScript与CSS交互

提示:以下是本篇文章正文内容,下面案例可供参考

一、JavaScript与CSS交互

1.style属性

  • 通过元素的style属性,可以获取或修改元素的CSS样式
    在这里插入图片描述

如CSS中,字体大小为font-size, 使用style属性时,需改为fontSize

练习创建三个按钮,对应三种颜色,点击按钮时,将页面背景修改为对应颜色
在这里插入图片描述
在这里插入图片描述

2.隐藏元素

在这里插入图片描述
在这里插入图片描述
练习创建一段文本,文本下方放置两个按钮,点击按钮可隐藏/显示上方文本。分别尝试visibility和display两种方式实现
在这里插入图片描述
在这里插入图片描述

3.修改className更改样式

  • 通过修改元素的所属类,并对不同的类设置相应样式,同样可达到更改样式的目的

在这里插入图片描述
在这里插入图片描述
练习创建一个列表,当鼠标移入列表中某一项时,为该项添加lg-red类(设置如上),鼠标移出时,移除该类

在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.lg-red{
				font-size: 20px;
				color: red;
			}
		</style>
	</head>
	<body>
		<ul>
			<li onmouseenter="mv()" onmouseleave="lv()">苹果</li>
			<li onmouseenter="mv()" onmouseleave="lv()">香蕉</li>
			<li onmouseenter="mv()" onmouseleave="lv()">橙子</li>
			<li onmouseenter="mv()" onmouseleave="lv()">菠萝</li>
		</ul>
		<script type="text/javascript">
			function mv(){
				event.target.className="lg-red"
			}
			function lv(){
				event.target.className=""
			}
		</script>
	</body>
</html>

4.拖拽事件

  • 将需要拖拽的源对象的dragable属性设为true

在这里插入图片描述

  • 给目标对象绑定ondragover事件函数,禁用其默认事件行为
    在这里插入图片描述

源对象

  • ondragstart事件
    用户开始拖动元素时触发

  • ondrag事件
    元素正在拖动时触发

  • ondragend事件
    用户完成元素拖动后触发

目标对象

  • ondragenter事件
    当被鼠标拖动的对象进入其容器范围内时触发

  • ondragover事件
    当被拖动的对象在容器范围内时触发

  • ondragleave事件
    当被拖动的对象离开容器时触发件

  • ondrop事件
    源元素被拖入容器内,并且释放鼠标时触发

练习使目标文本变为可拖动状态,让其可以在两个容器之间来回拖动
在这里插入图片描述

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.container{
				width:200px;
				height: 200px;
				border: 1px solid black;
				margin-top: 20px;
				display: flex;
				justify-content: center;
				align-items: center;
			}
		</style>
	</head>
	<body>
		<div class="container" ondragover="sj()" ondrop="drop()">
			<p draggable="true" ondragstart="drag()">目标文本</p>
		</div>
		<div class="container" ondragover="sj()" ondrop="drop()">
			
		</div>
		<script type="text/javascript">
			var qjbl
			function sj(){
				 event.preventDefault();
			}
			function drag(){
				qjbl=event.target
			}
			function drop(){
				event.preventDefault();
				event.target.appendChild(qjbl)
			}
		</script>
	</body>
</html>

二、课堂作业

1.按照要求完成任务

如下(示例):

在这里插入图片描述

在这里插入图片描述

2.解析代码

  • 任务16-1
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			.error {
				border: 2px solid #f95d5d;
				box-shadow: 0px 0px 5px 0px #f95d5d;
			}
		</style>
	</head>
	<body>
		&nbsp;&nbsp;&nbsp;用户名:<input type="text" name="" id="yhm" value="" onchange="check()" /><br>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;密码:<input type="password" name="" id="mm" value=""
			onchange="mm_check()" /><br>
		确认密码:<input type="password" name="" id="qrmm" value="" onchange="mm_check()" /><br>
		<input type="button" name="" id="" value="提交" onclick="tj_check()" />
	</body>
	<script type="text/javascript">
		var pattern = /^\w{4,16}$/
		var yhm = document.getElementById("yhm")
		var mm = document.getElementById("mm")
		var qrmm = document.getElementById("qrmm")

		function check() {
			if (!pattern.test(event.target.value)) {
				event.target.className = "error"
			} else {
				event.target.className = ""
			}
		}

		function mm_check() {
			if (mm.value == qrmm.value || qrmm.value == "") {
				mm.className = ""
				qrmm.className = ""
			} else {
				qrmm.className = "error"
			}
		}

		function tj_check() {
			if (yhm.value == "") {yhm.className="error"}
			if (mm.value == "") {mm.className="error"}
			if (qrmm.value == "") {qrmm.className="error"}
		}
	</script>
</html>

  • 任务16-2
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			@keyframes f {
				0% {
					background-color: red;
				}

				50% {
					background-color: darkred;
				}

				100% {
						{
						background-color: red;
					}
				}
			}

			@keyframes t {
				0% {
					background-color: green;
				}

				50% {
					background-color: darkgreen;
				}

				100% {
						{
						background-color: green;
					}
				}
			}

			.container {
				width: 200px;
				height: 200px;
				border: 1px solid black;
				margin-top: 20px;
				display: flex;
				justify-content: center;
				align-items: center;
			}

			#container {
				display: flex;
				justify-content: space-between;
			}

			.r1,
			.r2,
			.r3 {
				width: 198px;
				height: 198px;
				border-radius: 50%;
			}

			.r1 {

				background-color: yellow;
			}

			.r2 {

				background-color: pink;
			}

			.r3 {

				background-color: skyblue;
			}
		</style>
	</head>
	<body>
		<div id="container">


			<div>
				<div class="container" ondragover="sj()" ondrop="drop()">
					<div class="r1" id="r1" draggable="true" ondragstart="drag()" style="color: yellow;">

					</div>
				</div>
				<div class="container" ondragover="sj()" ondrop="drop()">
					<div class="r2" id="r2" draggable="true" ondragstart="drag()" style="color: pink;">

					</div>
				</div>
				<div class="container" ondragover="sj()" ondrop="drop()">
					<div class="r3" id="r3" draggable="true" ondragstart="drag()" style="color: skyblue;">

					</div>
				</div>
			</div>


			<div>


				<div class="container" id="skyblue" ondragover="sj()" ondrop="drop()" value="123"
					style="border-color:skyblue;">

				</div>
				<div class="container" id="pink" ondragover="sj()" ondrop="drop()" value="123"
					style="border-color:pink;">

				</div>
				<div class="container" id="yellow" ondragover="sj()" ondrop="drop()" value="123"
					style="border-color:yellow;">

				</div>

			</div>
		</div>
		<script type="text/javascript">
			var vl

			function sj() {
				event.preventDefault();
			}

			function drag() {
				vl = event.target
			}

			function drop() {
				event.preventDefault();
				event.target.appendChild(vl)
				if ((document.getElementById("skyblue").children.length!=0) && (document.getElementById("pink").children.length!=0
					) && (document.getElementById("yellow").children.length!=0)) {

					if (("r3" == document.getElementById("skyblue").children[0].id) && ("r2" == document.getElementById("pink")
							.children[0].id) && ("r1" == document.getElementById("yellow").children[0].id)) {
						document.body.style.backgroundColor = "green"
						document.body.style.animationName = "t";
						document.body.style.animationDuration = "1s";
						document.body.style.animationIterationCount = "infinite";
					} else {
						document.body.style.backgroundColor = "red"
						document.body.style.animationName = "f";
						document.body.style.animationDuration = "1s";
						document.body.style.animationIterationCount = "infinite";
					}
				}else{
					document.body.style.backgroundColor = "white"
					document.body.style.animationName = "";
					document.body.style.animationDuration = "";
					document.body.style.animationIterationCount = "";
				}
			}
		</script>
	</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值