2021-06-14

该博客主要介绍了使用HTML5和JavaScript实现的手风琴导航、图片放大遮罩层效果以及canvas绘制动态钟表的实践。手风琴效果实现了导航栏列表项的展开和收缩,遮罩层展示了图片放大功能,而canvas钟表则通过JavaScript动态更新时间。这些特效结合了CSS样式和事件监听,为网页增加了交互性和视觉吸引力。
摘要由CSDN通过智能技术生成

制作手风琴,遮罩层,canvas钟表效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


index.html部分


1.首先导入Jquery在线库 (本项目使用HBuilder X 软件制作)
<link rel="stylesheet" type="text/css" href="https://code.jquery.com/jquery-3.6.0.min.js"/>
2导航栏效果代码(图片地址请选择自己电脑的本地地址)

<!-- nav导航栏 -->
			<div class="nav">
			<div class="center">
				<div class="logo l">
					<img src="./img/logo/logo.png" >
				</div>
				<div class="liebiao">
					<ul>
						<!-- <div class="abs">为导航栏上横条结构 -->
						<li><div class="abs"></div><a href="#">手风琴</a></li>
						<li><div class="abs"></div><a href="#">遮罩层放大</a></li>
						<li><div class="abs"></div><a href="#">canvas钟表</a></li>
						<li><div class="abs"></div><a href="#">自定义效果</a></li>
					</ul>
				</div>
			</div>
		</div>
		<script type="text/javascript">
			//鼠标经过列表区变色函数
			function funMousever(x,bgd){
				$(".nav li").mouseover(function(){
					$(this).css("height","76").siblings("li").css("height","10")
					$(".nav li").eq(x).css("height","76")
					
					$(this).find(".abs").css({height:10,background:bgd})
					$(this).siblings("li").children(".abs").css("height","0")
					$(".abs").eq(x).css({height:10,background:bgd})
				})
			}
			//鼠标离开函数
			function funMouseleave(y,bgd){
				$(".nav li").mouseleave(function(){
					$(".nav li").eq(y).css("height","76").siblings("li").css("height","10")
					
					$(".abs").css("height","0")
					$(".abs").eq(y).css({height:10,background:bgd})
				})
			}
			//滚动监听事件判断当前内容区处于第几模块
			$(window).scroll(function(){
				$(".w").each(function(i,e){
					if($(document).scrollTop()>=$(e).offset().top){
						//函数调用
						if(i==0){
							funMousever(i,'#334960')
							funMouseleave(i,'#334960')
						}
						if(i==1){
							funMousever(i,'#f17c72')
							funMouseleave(i,'#f17c72')
						}
						
						if(i==2){
							funMousever(i,'#32ac97')
							funMouseleave(i,'#32ac97')
						}
						
						if(i==3){
							funMousever(i,'#7f4c76')
							funMouseleave(i,'#7f4c76')
						}
					}
				})
			})
			//点击滚动到指定区域
			$(".nav li").click(function(){
				console.log($(this).index())
				var current=$(".w").eq($(this).index()).offset().top
				$("body,html").stop().animate({
					scrollTop:current
				})
			})
			//滚动到该区域相应导航模块变色函数
			function bianse(x,bgd1,bgd2 ){
				$(".liebiao li").css("background",bgd1),$(".nav").css("background",bgd2)
				,$(".nav li").eq(x).css("height","76").siblings("li").css("height","10")
				
				,$(".nav li").eq(x).children(".abs").css({height:10,background:bgd2})
				,$(".nav li").eq(x).siblings("li").children(".abs").css("height","0")
			}
			$(window).scroll(function(){
				$(".w").each(function(i,e){
					if($(document).scrollTop()>=$(e).offset().top){
						//函数调用
						if(i==0){bianse(i,'#3f9fc9','#334960')}
						
						if(i==1){bianse(i,'#e6655e','#f17c72')}
						
						if(i==2){bianse(i,'#46dcc7','#32ac97')}
						
						if(i==3){bianse(i,'#b288ab','#7f4c76')}
					}
				})
			})
		</script>
		

3.手风琴代码

		<!-- 手风琴区域 -->
		<div class="shoufengqin w">
			<div class="texiao center">
				<ul>
					<li><img src="img/手风琴/slide-1.jpg" ></li>
					<li><img src="img/手风琴/slide-2.jpg" ></li>
					<li><img src="img/手风琴/slide-3.jpg" ></li>
					<li><img src="img/手风琴/slide-4.jpg" ></li>
					<li><img src="img/手风琴/slide-5.jpg" ></li>
				</ul>
			</div>
		</div>
		<script type="text/javascript">
			//页面加载后即滚动到手风琴区域,触发导航栏效果函数
			function fun1(){
				var current=$(".shoufengqin").offset().top
				$("body,html").animate({
					scrollTop:current
				})
				
			}
			fun1()
			//鼠标经过某个li当前li宽度变为770px,其余li的宽度变为100px
			$(".texiao li").mouseenter(function(){
				$(this).stop().animate({
					width:754,
					opacity:1
				})	
			$(this).siblings("li").stop().animate({
				width:104,
				opacity:1
			})
			})
			$(".texiao li").mouseleave(function(){
				$(".texiao li").stop().animate({
					width:234,
					opacity:0.6
				})
			})
		</script>

4.遮罩层代码

<!-- 遮罩层区域 -->
		<div class="zezhaoceng w">
			<div class="sanjiao1"></div>
			<div class="show center">
				<h1>遮罩层放大图</h1>
				<ul>
					<li><img src="img/遮罩层/large1.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large2.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large3.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large4.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large5.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large6.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large7.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
					<li><img src="img/遮罩层/large8.jpg" ><div class="zhezhao"></div><img class="sousuo" src="img/遮罩层/magnify.png" ></li>
				</ul>
				<div class="big"></div>
			</div>
		</div>
		<script type="text/javascript">
			//当鼠标经过li时,当前的li的遮罩层显示,其他li的遮罩层隐藏,
			$(".show li").mouseover(function(){
				$(this).find(".zhezhao").stop().show()
				$(this).find(".sousuo").stop().show()
			})
			$(".show li").mouseout(function(){
				$(this).find(".zhezhao").stop().hide()
				$(this).find(".sousuo").stop().hide()
			})
			//轮播图方法,待完善
			$(".show li").click(function(){
				 $(".big").show()
				 $(this).animate({
					 zIndex:1,
					 width:640,
					 height:427,
				 })
				 alert("功能待完善,请重新刷新网页")
			 })
		</script>

5.canvas钟表代码

<!-- canvas钟表区域 -->
		<div class="zhongbiao w" >
			<div class="sanjiao2"></div>
			<div class="content center">
				<div class="text l">
					<h1 class="white">canvas画布</h1>
					<p>canvas 元素用于在网页上绘制图形。HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像。</p>
					<p>在矩形区域的画布上,JavaScript 绘制 2D图形,逐像素进行渲染,可以通过多种方法使用canvas元素绘制路径、矩形、圆形、字符以及添加图像。</p>
					<p>canvas 元素本身是没有绘图能力的。所有的绘制工作必须使用Javascript canvas绘图API完成。</p>
					<p>canvas在基于Web的图像显示方面比Flash更加立体、更加精巧,canvas游戏在流畅度和跨平台方面更牛。</p>
					<p>Flash曾经辉煌的时代,智能手机还未曾出现。现在以及未来的智能机时代,HTML5技术能够在banner广告上发挥巨大作用,用Canvas实现动态的广告效果再合适不过。</p>
				</div>
				<div class="naozhong l">
					<h1 class="white">钟表</h1>
					<div class="shijian">
						<ul id="ulid"></ul>
						<div id="hour"></div>
						<div id="minu"></div>
						<div id="sceo"></div>
					</div>
				</div>
			</div>
		</div>
		<script type="text/javascript">
			//获取时分秒元素
			var ul=document.querySelector('#ulid')
			var hour=document.querySelector('#hour')
			var minu=document.querySelector('#minu')
			var sceo=document.querySelector('#sceo')
			//循环打印表盘
			for(var i=0;i<60;i++){
				var li=document.createElement('li')
				li.style.transform='rotate('+(i*6)+'deg)'
				if(i%5===0){
					li.style.height='30px'
					li.style.backgroundColor='black'
				}
				ul.appendChild(li)
			}
			run();
			//隔一秒执行一次
			setInterval(run,1000)
			function run(){
				var date=new Date()
				//获取系统时分秒时间
				var h=date.getHours()
				var m=date.getMinutes()
				var s=date.getSeconds()
				//时分秒旋转相对应角度
				hour.style.transform='rotate('+(h*30+m/2)+'deg)'
				minu.style.transform='rotate('+(m*6)+'deg)'
				sceo.style.transform='rotate('+(s*6)+'deg)'
			}
		</script>
		

6.自定义效果

<!-- 自定义效果区域 -->
		<div class="zidingyi w">
			自定义效果
		</div>
		<script type="text/javascript">
			var lis=document.querySelector('.zidingyi').querySelectorAll('img')
			var box=document.querySelector('.box')
			for(var i=0;i<lis.length;i++){
				lis[i].onclick=function(){
					box.style.background='url('+this.src+')';
				}
			}
		</script>

7.底部区域

<!-- 底部区域 -->
		<div class="footer">
			<p>本页面完成于2018-1-18,内容为《计算机软件工程》期末考试页面。</p>
		</div>

8.返回顶部区域

<!-- 返回顶部区域 -->
		<div class="fanzu">
			<img src="img/返回/totop.png" >
		</div>
		<script type="text/javascript">
			$(".fanzu").click(function(){
				var current=$(".shoufengqin").offset().top
				$("body,html").animate({
					scrollTop:current
				})
			})
		</script>

CSS样式


1.三角形和整体效果

* {
	margin: 0;
	padding: 0;
}
a {
	text-decoration: none;
}
li {
	list-style: none;
}
.white {
	color: white;
}
/* 左右浮动类 */
.l {
	float: left;
}
.r {
	float: right;
}
/* 版心 */
.center {
	width: 1173px;
	margin: 0 auto;
}
/* 三角形制作 */
.sanjiao1,.sanjiao2,.sanjiao3 {
	position: absolute;
	top: 0;
	left: 900px;/* 如何让绝对定位的盒子相对于父盒子居中 */
	width: 0;
	height: 0;
	border-style: solid;
	border-width: 37px 50px 37px 50px;
}
.sanjiao1 {
	border-color:  #334960 transparent transparent transparent;
	
}
.sanjiao2 {
	border-color:  #f17c72 transparent transparent transparent;
	
}
.sanjiao3 {
	border-color:  #32ac97 transparent transparent transparent;
	
}

2.导航栏

/* nav导航栏 */
.nav {
	width: 100%;
	background-color: #334960;
	height: 100px;
	border-bottom: 1px solid black;
	position: fixed;
	top: 0;
	z-index: 1;
	
}

.logo img {
	margin: 30px 550px 0 0;
}
.liebiao ul li {
	position: relative;
	float: left;
	/* height: 10px; */
	transition: height 300ms;
	
}
.liebiao ul li .abs {
	position: absolute;
	width: 100%;
	top: 0;
	transition: height 10ms;
}
.liebiao ul li a {
	display: inline-block;
	padding: 38px 15px 12px 15px;
	/* margin-top: 10px; */
	color: white;
	font-size: 20px;
	
}

3.手工琴

/* 手风琴区域*/
.shoufengqin {
	height: 670px;
	background-color: #334960;
	padding-top: 85px;
	margin-top: 100px;
}
.texiao {
	height: 395px;
}
.texiao ul li {
	float: left;
	width: 230px;
	height: 395px;
	opacity:0.5;
	overflow: hidden;
	
}`

4.遮罩层

/* 遮罩层区域 */
.zezhaoceng {
	position: relative;
	padding: 185px 0 185px 0;
	background-color: #f17c72;
}
.show {
	position: relative;
	height: 460px;
	overflow: hidden;
}
.big {
	position: absolute;
	width: 100%;
	height: 100%;
	top: 0;
	left: 0;
	background-color: rgba(0,0,0,1);
	display: none;
	
}

.show h1 {
	color: white;
	font-weight: normal;
}
.show ul li {
	position: relative;
	float: left;
	width: 270px;
	height: 192px;
	overflow: hidden;
	border-radius: 5px;
	margin-top: 15px;
	margin-right: 30px;
	
}
.show ul li:nth-child(4) {
	margin-right: 0;
}
.show ul li:nth-child(8) {
	margin-right: 0;
}
.show .zhezhao {
	position: absolute;
	width: 270px;
	height: 192px;
	border-radius: 5px;
	top: 0;
	left: 0;
	background-color: rgba(0,0,0,0.6);
	display: none;
	
}
.show .sousuo {
	position: absolute;
	left: 110px;
	top: 80px;
	display: none;
}

5.canvas钟表样式

/* canvas钟表区域 */
.zhongbiao {
	position: relative;
	background-color: #32ac97;
	padding: 185px 0 185px 0;
	height: 550px;
}
.text {
	width: 545px;
	height: 500px;
	text-indent: 2em;
	margin:0 20px 0 30px;
	
}
.text h1 {
	text-indent: 0em;
	font-size: 35px;
	font-weight: normal;
	margin-bottom: 40px;
}
.text p {
	font-size: 20px;
	line-height: 35px;
}
.shijian {
	position: relative;
	width: 410px;
	height: 410px;
	border: 10px solid red;
	border-radius: 50%;
	margin-top: 20px;
	margin-left: 70px;
}
.naozhong h1 {
	font-size: 35px;
	font-weight: normal;
}
/* 会动的表 */
.shijian ul {
	width: 100%;
	height: 100%;
	position: relative;
}
.shijian ul li {
	position: absolute;
	width: 5px;
	height: 15px;
	background-color: white;
	left: 50%;
	top: 0;
	transform-origin: center 210px;
}
#hour,#minu,#sceo{
	position: absolute;
	left: 50%;
	top: 50%;
	transform-origin: center bottom;
}
#hour {
	background-color: yellow;
	width: 6px;
	height: 50px;
	margin-top: -50px;
}
#minu {
	background-color: blueviolet;
	width: 4px;
	height: 80px;
	margin-top: -80px;
}
#sceo {
	background-color: red;
	width: 2px;
	height: 120px;
	margin-top:-120px ;
}

6.自定义效果

/* 自定义效果区域*/
.zidingyi {
	height: 1000px;
	background-color: #7f4c76;
	
}

7.底部

/* 底部区域 */
.footer {
	width: 100%;
	height: 100px;
	background-color:#334960 ;
	text-align: center;
}
.footer p {
	color: white;
	line-height: 100px;
}

8.返回顶层

/* 返回顶部区域 */
.fanzu {
	overflow: hidden;
	width: 49px;
	height: 49px;
	border-radius: 50%;
	border: 1px solid pink;
	position: fixed;
	top: 80%;
	right: 0;
	z-index: 1;
}

运行效果如下:

web手风琴效果

资料图片:可自行保存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值