原生JS实现翻书效果

如何使用制作翻书效果?

思路:

  首先准备一个div作为书本,然后准备一个div作为第一页,其中还要有两个div作为正反面,分别对其各部分属性进行设置。其中还要为book与page开启3D,还用到了一个backface-visible(其实这个属性我之前没见到过,这是第一次用 )属性,该属性用来设置当div翻转一定角度后是否可见,制作好第一页后,其余的几页与第一页类似。
注意:
  要对每页的z-index属性设置,否则将从后向前显示(四 三 二 一),z-index属性用于设置它的层叠等级,数字越大层次越高。
  最好将正面的div放在反面的下面,这样显示时不需要再设置z-index属性了。
  其中设置div的box-sizing属性为border-box;这样为div设置padding和margin时不会影响元素的宽,高

js部分:

  使用querySelector分别获得book与page元素,声明一个变量page(初值为1,第一页下标是0),来表示第几页,当执行book的单击事件时,就会调用执行function()函数;函数第一次执行时,将第一页翻转-135deg,时间是2s。然后page自加,判断是否满足if条件:
  若满足if语句的条件,则说明书本已经翻到最后一页,并将书本合上,从后往前执行循环,依次将每页的翻转角度变为0即可;
  若不满足,则判断是否满足循环执行的条件,进行第二次循环,重复上面过程。。。
效果如下:在这里插入图片描述
具体看代码:

<style>
	body{
	 	background:#666666;
		margin: 0;
		padding: 0;
	}
	.book{
		position: relative;
		margin: 200px auto;/*让book在页面居中*/
		width:200px;
		height: 300px;
		background-color: #B22222;
		transform-style: preserve-3d;/*开启3D*/
	}
	#page1,#page2,#page3,#page4{
		transform-style: preserve-3d;/*开启3D*/
		transition: 2s;/*时间是两秒*/
		transform-origin: left;/*并将其旋转元素的基点位置设置成左边*/
		position: absolute;/*将其分别定位在book中*/
		left:0;
		top:0;
		width:200px;
		height:300px;
	}
	/*设置每页的层叠等级*/
	#page1{
		z-index: 4;
	}
	#page2{
		z-index: 3;
	}
	#page3{
		z-index: 2;
	}
	#page4{
		z-index:1;
	}
	.before{
		width:200px;
		height:300px;
		position: absolute;
		left:0;
		top:0;
		background-color: #32CD32;
		text-align:center;
		box-sizing: border-box;
		border:10px solid white;
		font:bold 36px/300px arial;
		backface-visibility: hidden;
	}
	.after{
		position:absolute;
		width:200px;
		height: 300px;
		box-sizing: border-box;
		left:0;
		top:0;
		background-color:#DCDCDC;
		border:10px solid white;
	}
</style>
<body>
	<div class="book">
		<div id="page1">
			<div class="after"></div>
			<div class="before">HTML5</div>
		</div>
		<div id="page2">
			<div class="after"></div>
			<div class="before">CSS3</div>
		</div>
		<div id="page3">
			<div class="after"></div>
			<div class="before">Javascript</div>
		</div>
		<div id="page4">
			<div class="after"></div>
			<div class="before">END</div>
		</div>
	</div>
	<script>
		var page=0;
		var pagedemo = document.querySelectorAll("[id^='page']");
		var bookdemo = document.querySelector(".book");
		bookdemo.οnclick=function(){
			pagedemo[page].style.transition="2s";
			pagedemo[page].style.transform="rotateY(-135deg)";
			page++;
			if(page==4){
				var i;
				for(i=page-1;i>=0;i--){
					pagedemo[i].style.transform="rotateY(0deg)";
				}
			}
		}
	</script> 	
</body>	
发布了16 篇原创文章 · 获赞 12 · 访问量 1293

猜你喜欢

转载自blog.csdn.net/qq_45731083/article/details/103416815
今日推荐