欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

JavaScript中怎么實現(xiàn)拖動緩動效果-創(chuàng)新互聯(lián)

這篇文章給大家介紹JavaScript中怎么實現(xiàn)拖動緩動效果,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

通化縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!

首先,綁定鼠標按下事件,來獲取到鼠標基于瀏覽器窗口左上角的xy平面二維坐標。

然后,綁定move事件,在move事件回調(diào)內(nèi)獲取到鼠標拖拽的坐標,和按下坐標相減,求出拖拽的距離。

然后,我們需要通過一定比例,將拖拽的像素轉(zhuǎn)換為旋轉(zhuǎn)角度我這里設置的比例是,鼠標橫向拖拽10像素,那模型沿3d的Y軸坐標就旋轉(zhuǎn)5度,鼠標縱向拖拽10像素,模型沿3d世界的X軸坐標旋轉(zhuǎn)1度,并且還設置了范圍,即沿x軸旋轉(zhuǎn)再-45度到45度之間

function onDocumentMouseMove(event) {    mouseX = event.clientX;    mouseY = event.clientY;    targetRotationX = targetRotationOnMouseDownX + (mouseX - mouseXOnMouseDownX) * 0.5;    targetRotationY = Math.min(Math.max((targetRotationOnMouseDownY - (mouseY - mouseXOnMouseDownY) * 0.1), -45), 45); //拖拽后的目標位置  }

上面獲取到目標角度,重點來了,如何實現(xiàn)惰性旋轉(zhuǎn)呢?

通過上面思路,我們知道了目標角度,那么直接設置目標角度,肯定就沒有這種想要的效果了,那么如何實現(xiàn)這種惰性效果呢?

接下來,我們需要一個專門實現(xiàn)動畫的requestAnimationFrame方法,這個方法是閑時運行,較大根據(jù)性能能夠達到60幀每秒,有好多小伙伴感覺一直遞歸運行會不會卡頓,或者影響性能。那是你多慮了,這個方法會根據(jù)當前頁面性能進行減幀,保證頁面流暢運行。

我們有了這個以后,然后做什么呢,就是用來實現(xiàn)緩動,在每一幀里面,獲取到目標角度和當前角度的角度差,然后每一次只選擇總進度的百分之10 ,然后你會發(fā)現(xiàn)選擇離目標角度越近,越慢,體驗效果也是非常的棒。

而且在運行中,角度也會無限制的接近目標角度,當前demo是通過css3d來實現(xiàn)的:

function animate() {    requestAnimationFrame(animate);    rotateY += (targetRotationX - rotateY) * 0.1;    rotateX += (targetRotationY - rotateX) * 0.1;    box.style.transform = 'rotateY(' + rotateY + 'deg)';    item.style.transform = 'rotateX(' + rotateX + 'deg)';  }

案例全部代碼

<!DOCTYPE html><html lang="zh"><head>  <meta charset="UTF-8">  <title>css3d翻轉(zhuǎn)</title>  <style>    * {      padding: 0;      margin: 0;    }    body {      display: flex;      justify-content: center;      align-items: center;      height: 100vh;      overflow: hidden;      perspective: 1000px;    }    .item {      width: 50vw;      height: 50vh;      transform: rotateX(-50deg);      perspective: 5000px;      transform-style: preserve-3d;    }    .box {      background: #abb9c5;      width: 100%;      height: 100%;      transform-style: preserve-3d;      position: relative;    }    .font,    .back {      position: absolute;      top: 0;      left: 0;      width: 100%;      height: 100%;      text-align: center;      line-height: 50vh;      background: #4cae4c;      backface-visibility: hidden;    }    .back {      background: #62ebff;      transform: rotateY(180deg);    }  </style></head><body>  <!--item 可以觸發(fā)翻轉(zhuǎn)的區(qū)域-->  <p class="item">    <!--box 可以翻轉(zhuǎn)的容器-->    <p class="box">      <!--font 默認顯示的正面-->      <p class="font">正面</p>      <!--back 背面-->      <p class="back">背面</p>    </p>  </p></body><script>  var targetRotationX = 0;  var targetRotationY = 0;  var targetRotationOnMouseDownX = 0;  var targetRotationOnMouseDownY = 0;  var mouseX = 0;  var mouseY = 0;  var mouseXOnMouseDownX = 0;  var mouseXOnMouseDownY = 0;  var box = document.querySelector('.box');  var item = document.querySelector('.item');  var rotateY = 0;  var rotateX = 0;  init();  animate();  function init() {    // EVENTS    document.addEventListener('mousedown', onDocumentMouseDown, false);    document.addEventListener('touchstart', onDocumentTouchStart, false);    document.addEventListener('touchmove', onDocumentTouchMove, false);  }  function onDocumentMouseDown(event) {    event.preventDefault();    document.addEventListener('mousemove', onDocumentMouseMove, false);    document.addEventListener('mouseup', onDocumentMouseUp, false);    mouseXOnMouseDownX = event.clientX;    mouseXOnMouseDownY = event.clientY;    targetRotationOnMouseDownX = targetRotationX;    targetRotationOnMouseDownY = targetRotationY;  }  function onDocumentMouseMove(event) {    mouseX = event.clientX;    mouseY = event.clientY;    targetRotationX = targetRotationOnMouseDownX + (mouseX - mouseXOnMouseDownX) * 0.5;    targetRotationY = Math.min(Math.max((targetRotationOnMouseDownY - (mouseY - mouseXOnMouseDownY) * 0.1), -45), 45); //拖拽后的目標位置  }  function onDocumentMouseUp() {    document.removeEventListener('mousemove', onDocumentMouseMove, false);    document.removeEventListener('mouseup', onDocumentMouseUp, false);  }  function onDocumentTouchStart(event) {    event.preventDefault();    if (event.touches.length === 1) {      mouseXOnMouseDownX = event.touches[0].pageX;      mouseXOnMouseDownY = event.touches[0].pageY;      targetRotationOnMouseDownX = targetRotationX;      targetRotationOnMouseDownY = targetRotationY;    }  }  function onDocumentTouchMove(event) {    event.preventDefault();    if (event.touches.length === 1) {      mouseX = event.touches[0].pageX;      mouseY = event.touches[0].pageY;      targetRotationX = targetRotationOnMouseDownX + (mouseX - mouseXOnMouseDownX) * 0.5;      targetRotationY = Math.min(Math.max((targetRotationOnMouseDownY - (mouseY - mouseXOnMouseDownY) * 0.1), -45), 45); //拖拽后的目標位置    }  }  function animate() {    requestAnimationFrame(animate);    rotateY += (targetRotationX - rotateY) * 0.1;    rotateX += (targetRotationY - rotateX) * 0.1;    box.style.transform = 'rotateY(' + rotateY + 'deg)';    item.style.transform = 'rotateX(' + rotateX + 'deg)';  }</script></html>

關(guān)于JavaScript中怎么實現(xiàn)拖動緩動效果就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

當前名稱:JavaScript中怎么實現(xiàn)拖動緩動效果-創(chuàng)新互聯(lián)
標題URL:http://aaarwkj.com/article40/ccheho.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、網(wǎng)站內(nèi)鏈、網(wǎng)站建設建站公司、全網(wǎng)營銷推廣、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
精品成人在线一区二区| 亚洲香蕉av在线一区二区三区| 亚洲精品aa片在线观看国产| 日本午夜福利免费在线播放| 白白色最新福利在线视频观看 | 特级艳片在线观看免费| 国产日韩欧美亚洲中文| 亚洲欧美国产日韩综合在线| 亚洲欧美一区二区中文字幕| 亚洲av色福免费网站| 色悠悠粉嫩一区二区三区| 国产三级精品三级在线播放| 日韩欧美 高清一区| av黄色天堂在线观看| 黄片在线免费观看欧美中文| 声入人心第一季在线观看| 国产白浆一区二区视频| 欧美日本国产专区一区| 精品亚洲一区二区三区四| 精品欧美国产日韩在线观看| 国产精品久久综合网| 国产精品岛国片在线观看| 日本久久在线观看视频| 美女爽到高潮久久久| 欧美一区二区三区久久妇| 88国产精品久久久久久| 亚洲熟妇精品一区二区| 三级国产大片在线观看| 欧美日韩亚洲国产专区精品| 国产精品一区巨乳人妻| 中文字幕免费日本在线| 国语自产拍在线观看不卡| 亚洲五月婷婷久久综合| 五月婷婷丁香婷婷丁香| 亚洲国产中文日韩欧美在线| 日韩精品 在线一区二区| 成人免费大片在线观看视频| 高颜值美女后入内射视频| 亚洲男人天堂中文字幕| 成人精品颜射少妇内射| 91久久精品凹凸一区二区|