vue項(xiàng)目tween方法實(shí)現(xiàn)返回頂部的示例代碼
一、場景
tween.js是一款可生成平滑動(dòng)畫效果的js動(dòng)畫庫
當(dāng)你要實(shí)現(xiàn)一個(gè)返回頂部的功能時(shí)候你會(huì)怎么做,大部分人會(huì)使用document.body.scrollTop =0;這么寫就實(shí)現(xiàn)了功能,
不過要更加的細(xì)膩一點(diǎn)我們不妨用tween的緩動(dòng)來實(shí)現(xiàn),看看效果如何吧。
之前我們寫過tween的相關(guān)文章,這里不做介紹了。
二、代碼
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<style type="text/css">
#app{width: 100%; height: 3000px;background: #CCCCCC;}
.backTop{
width: 1.5rem;
height: 1.5rem;
border: 1px solid #ff0000;
position: fixed;
right: 1rem;
bottom: 2rem;
border-radius: 50%;
/*background: url(/static/imgs/backtop20180226.png) no-repeat 40%;*/
background-size: 70% 100%;
}
</style>
</head>
<body>
<div id="app">
<div @click="backTop()" class="backTop">Top</div>
</div>
<script type="text/javascript">
var app = new Vue({
el:"#app",
data:{
},
methods:{
backTop(){
// * t: current time(當(dāng)前時(shí)間);
// * b: beginning value(初始值);
// * c: change in value(變化量);
// * d: duration(持續(xù)時(shí)間)。
var Tween = {
Linear: function(t, b, c, d) { //勻速運(yùn)動(dòng),想要實(shí)現(xiàn)其他的效果可以使用tween的其他方法
return c * t / d + b;
}
}
Math.tween = Tween;
var t = 1;
const b = document.documentElement.scrollTop;
const c = 50;
const d = 5;
const setInt = setInterval(()=>{
t--;
console.log(t)
if(document.documentElement.scrollTop == 0){clearInterval(setInt)}
console.log(t);
const backTop = Tween.Linear(t,b,c,d);
console.log(backTop);
document.documentElement.scrollTop = backTop;
},20)
}
}
})
</script>
</body>
</html>
三、requestAnimationFrame改寫setInterval方法:
methods:{
backTop(){
var Tween = {
Linear: function(t, b, c, d) { //勻速
return c * t / d + b;
}
}
Math.tween = Tween;
var t = 1;
const b = document.body.scrollTop;
const c = 1;
const d = 1;
var timer;
timer= requestAnimationFrame(function fn(){
if(document.body.scrollTop > 0){
t--;
console.log(t)
console.log(t);
const backTop = Tween.Linear(t,b,c,d);
console.log(backTop);
document.body.scrollTop = backTop;
timer = requestAnimationFrame(fn);
}else{
cancelAnimationFrame(timer)
}
})
}
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Vue.js搭建路由報(bào)錯(cuò) router.map is not a function
這篇文章主要介紹了詳解Vue.js搭建路由報(bào)錯(cuò) router.map is not a function,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-06-06
vue watch監(jiān)控對(duì)象的簡單方法示例
這篇文章主要給大家介紹了關(guān)于vue watch監(jiān)控對(duì)象的簡單方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Vue的路由動(dòng)態(tài)重定向和導(dǎo)航守衛(wèi)實(shí)例
下面小編就為大家分享一篇Vue的路由動(dòng)態(tài)重定向和導(dǎo)航守衛(wèi)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-03-03
解決antd 下拉框 input [defaultValue] 的值的問題
這篇文章主要介紹了解決antd 下拉框 input [defaultValue] 的值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
vue如何實(shí)時(shí)往數(shù)組里追加數(shù)據(jù)
這篇文章主要介紹了vue如何實(shí)時(shí)往數(shù)組里追加數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue2.0 中使用transition實(shí)現(xiàn)動(dòng)畫效果使用心得
這篇文章主要介紹了vue2.0 中使用transition實(shí)現(xiàn)動(dòng)畫效果使用心得,本文通過案例知識(shí)給大家介紹的非常詳細(xì),需要的朋友參考下吧2018-08-08
vue.js+elementUI實(shí)現(xiàn)點(diǎn)擊左右箭頭切換頭像功能(類似輪播圖效果)
這篇文章主要介紹了vue.js+elementUI實(shí)現(xiàn)點(diǎn)擊左右箭頭切換頭像功能(類似輪播圖),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
element-ui 上傳圖片后清空圖片顯示的實(shí)例
今天小編就為大家分享一篇element-ui 上傳圖片后清空圖片顯示的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09

