国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

3D 視差效果

DobbyKim / 2752人閱讀

摘要:前一周敢玩新版端上線,其中原創視頻封面用的就是上圖的效果,下面詳細說一下怎么實現起因這個效果有著相對較好的用戶體驗,在的基礎上又有了與用戶交互的體驗,仿佛用戶一直在不同角度按壓這張圖片。

前一周敢玩新版PC端上線,其中原創視頻封面用的就是上圖的效果,下面詳細說一下怎么實現

起因

這個效果有著相對較好的用戶體驗,在 hover 的基礎上又有了與用戶交互的體驗,仿佛用戶一直在不同角度按壓這張圖片。

當然這個效果早就有人在寫并用于官網了,感興趣可以去錘子官網,看下輪播圖的鼠標交互效果。

基本思路

單借助 CSS3 的 hover 不足以支配這個效果,JS 方案考慮以下步驟

綁定鼠標事件(mouseover),綁定離開事件(mouseleave)

判斷鼠標相對于圖片的位置

計算出應該翻轉(rotate)的角度,同時改變陰影的方向

將圖片復位

這里涉及 CSS3 的一個比較少用的屬性 perspective

MDN: perspective 屬性指定了觀察者與 z = 0 平面的距離,使具有三維位置變換的元素產生透視效果。z > 0 的三維元素比正常大,而 z < 0 時則比正常小,大小程度由該屬性的值決定。

深入了解去看這個文章CSS3 Transform 的 perspective 屬性,時間比較久但是很經典,除了兼容性描述有變其它描述很準確。

開始構建

html:

css:

.avatar {
  width: 300px;
  height: 300px;
  margin: 50px auto;

  background: url("http://7xr2s7.com1.z0.glb.clouddn.com/avatar.jpg");
  background-size: contain;

  transition: all .3s linear;
  transform-origin: 50%;
}

js:

let el = document.querySelector(".avatar")

el.addEventListener("mousemove", (e) => {
  let thisPX = el.getBoundingClientRect().left
  let thisPY = el.getBoundingClientRect().top
  let boxWidth = el.getBoundingClientRect().width
  let boxHeight = el.getBoundingClientRect().height

  let mouseX = e.pageX - thisPX
  let mouseY = e.pageY - thisPY
  let X
  let Y

  X = mouseX - boxWidth / 2
  Y = boxHeight / 2 - mouseY

  el.style.transform = `perspective(300px) rotateY(${X / 10}deg) rotateX(${Y / 10}deg)`
  el.style.boxShadow = `${-X / 20}px ${Y / 20}px 50px rgba(0, 0, 0, 0.3)`
})


el.addEventListener("mouseleave", () => {
  el.style.transform = `perspective(300px) rotateY(0deg) rotateX(0deg)`
  el.style.boxShadow = ""
})

以上代碼看似沒什么問題,也許你在新版本瀏覽器(無需babel)已經順利執行了,但是這里有一個坑。

除非你能確定你的圖片在一屏內,就是說你的 body 最大高度就是窗口高度,不然 let mouseY = e.pageY - thisPY 這句計算出來的不一定是真實的鼠標偏移量,而是加上滾動調偏移后的值。

解決辦法就是

let scrollTop = document.documentElement.scrollTop + document.body.scrollTop  //計算滾動高度

let mouseY = e.pageY - scrollTop - thisPY  //減去滾動高度

一般的項目考慮到這就可以了,如果你的項目存在 X 軸上的偏移計算原理相同,減去偏移量。

實例

我自己的代碼放在了 codepen,如下

https://codepen.io/orangexc/p...

另外最近發現在 codepen 上的一個項目,在熱門榜單上,基本思路是一樣的只不過換了種方式去寫,很不錯的例子,對于需要多個元素循環綁定的情況很好用。

https://codepen.io/PavelDoGre...

注:此種方法規避了高度差計算的問題,因為是基于 offsetX(作用元素的偏移量),推薦使用
總結

JS 動畫考慮的會相對多一些,可以獲取寬高及鼠標位置(方法多樣),根據鼠標位置可以計算出動畫的對應效果,選擇合適的且兼容性好的代碼很關鍵

文章出自 orange 的 個人博客 http://orangexc.xyz/

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86573.html

相關文章

  • 滾動視差?CSS 不在話下

    摘要:可以感受下種不同取值的不同效果使用實現滾動視差首先,我們使用來實現滾動視差。何為滾動視差 視差滾動(Parallax Scrolling)是指讓多層背景以不同的速度移動,形成立體的運動效果,帶來非常出色的視覺體驗。 作為網頁設計的熱點趨勢,越來越多的網站應用了這項技術。 通常而言,滾動視差在前端需要輔助 Javascript 才能實現。當然,其實 CSS 在實現滾動視差效果方面,也有著不俗...

    RobinTang 評論0 收藏0
  • [轉]滾動視差?CSS 不在話下/background attachment

    摘要:通常而言,滾動視差在前端需要輔助才能實現。當然,其實在實現滾動視差效果方面,也有著不俗的能力。此關鍵字表示背景相對于視口固定。使用實現滾動視差言歸正傳,下面介紹另外一種使用實現的滾動視差效果,利用的是。? ? 何為滾動視差 視差滾動(Parallax Scrolling)是指讓多層背景以不同的速度移動,形成立體的運動效果,帶來非常出色的視覺體驗。 作為網頁設計的熱點趨勢,越來越多的網站應...

    darry 評論0 收藏0
  • CSS3 3D transform變換 視差滾動效果學習

    摘要:變換視差滾動效果學習在學習如何做到視差滾動效果時,閱讀了張鑫旭老師的文章,記錄下學習視差滾動變換的幾個理解點。視差滾動中的計算,畫一個草圖即可得知,是舞臺視覺平面抬起向你而來的距離,而是元素后退的距離離你而去,所以 CSS3 3D transform變換 視差滾動效果學習 在學習css如何做到視差滾動效果時,閱讀了張鑫旭老師的文章,記錄下學習視差滾動 and 3D transform變...

    el09xccxy 評論0 收藏0

發表評論

0條評論

DobbyKim

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<