VUE實現背景視差滾動效果

    前段時間公司領導安排我把公司的官網重做一下(至於爲什麼重做我這裏就不細說了),但咱也沒寫過網頁的項目呀!不過呢咱還是有點微信小程序和基本的html基礎的,也就接下了這個任務。想想最近VUE貌似挺火的,也就順便學習一下。那接下來要說的內容就是基於VUE編寫的了。好,廢話說完了,開始~

 

1.視差滾動

      視差滾動(Parallax Scrolling)指網頁滾動過程中,多層次的元素進行不同程度的移動,視覺上形成立體運動效果的網頁展示技術。

     先看我寫的一個簡單效果:

      這是一個很簡單的示例,相信大家在很多網站應該都見過這種效果。主內容和背景圖的滾動速率不一樣就實現了這種視差效果。現在來說說怎麼是實現的吧!

2.實現

    咱先創建一個vue項目,寫一個簡單頁面,目錄結構如下:

 

      我們先刪除Home.vue中的佈局代碼,重新寫一個簡單界面:

<template>
  <div class="home">
    <p v-for="item in 20" :key="item">aaaaaaaaaaaaaaaaaaaa</p>
	<div class="bgTest"></div>
	<p v-for="item in 20" :key="item">aaaaaaaaaaaaaaaaaaaa</p>
  </div>
</template>

<script>
export default {
  name: "Home",
  components: {
  }
};
</script>
<style>

	.bgTest{
		height: 500px;
		background: url(../assets/bg.jpg) no-repeat;
		background-attachment: fixed;
		background-size: 100% 100%;
		font-size: 20px;
		
	}
</style>

  代碼很簡單,一個div裏面設置了一個長背景圖,上下加上p標籤用來撐高頁面使頁面可以滾動。先看一下效果圖:

 

可以看到隨着內容的滾動,但是背景圖片卻沒有跟着滾動,而是展示出背景圖不同的部位。這個效果也有一些網站會用到,這個實現比較簡單,值得說一下的就是css的這個屬性:

background-attachment: fixed;

這個屬性是幹嘛的呢?看介紹

 

因爲我的div設置了background-attachment: fixed;屬性,所以div的背景圖片是固定的。但有的同學就說,這不是我要的效果呀,我要的效果是,隨着內容的滾動,背景圖片會跟着有小幅的滾動。別急,接下來再看一個css的屬性:

background-position

那這個background-position有什麼作用呢?看介紹:

      設置背景圖片的起始位置能幹嘛?大家想一下現在我們的圖片是固定的,沒有滾動,但是如果我麼設置了背景y軸或者x軸的起始位置隨着鼠標滾動而產生的不同的偏差,是不是也和背景滾動有一樣的效果了,只要我們把背景滾動的速率控制的慢一點,就能實現文章開頭的效果。好,有了思路,開始寫代碼,更改Home.vue中的代碼,添加隨着鼠標滾動改變背景位置的邏輯:

<template>
	<div class="home">
		<p v-for="item in 20" :key="item">aaaaaaaaaaaaaaaaaaaa</p>
		<div class="bgTest" id="bgTest" :style="{'background-position-y':positionY1+'px'}"></div>
		<p v-for="item in 20" :key="item+20">aaaaaaaaaaaaaaaaaaaa</p>
	</div>
</template>

<script>
	export default {
		name: "Home",
		data() {
			return {
				positionY1: 0, //背景Y軸偏移量
				Y1: 0,
				ratio: 0.5 //視差偏移率
			}
		},
		/**
		 * 
		 * */
		mounted() {
			window.addEventListener("scroll", this.handleScroll); //創建滾動監聽,頁面滾動回調handleScroll方法
				let bgTest = document.getElementById("bgTest");
				this.Y1 = bgTest.offsetTop * this.ratio

		},
		methods: {
			/**
			 * 背景視差偏移計算
			 * */
			handleScroll: function() {
				let scrollTop =
					window.pageYOffset ||
					document.documentElement.scrollTop ||
					document.body.scrollTop;
				this.positionY1 = this.Y1 - scrollTop * this.ratio; //原始高度-滾動距離*視差係數
				
			}
		},
		components: {}
	};
</script>
<style>
	.bgTest {
		height: 500px;
		background: url(../assets/bg.jpg) no-repeat;
		background-attachment: fixed;
		background-size: 100% 100%;
		font-size: 20px;

	}
</style>

     

     根據“bgTest”距離頂部的距離動態的計算了背景Y軸的偏移量,看看效果:

    這下背景隨着鼠標滾動就會有小幅度滾動了。至於細節方面可以調整ratio的值和Y1的計算方式來優化細節。ratio的值控制背景滾動速率,Y1值控制背景起始位置。

    好了大功告成。附上源碼地址:

https://github.com/954469291/background_parallax.git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章