原生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>	
發佈了14 篇原創文章 · 獲贊 12 · 訪問量 1093
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章