<template>
<div>
<div @click="onClick" class="back-to-top" v-show="isOpened"></div>
</div>
</template>
<script>
export default {
data() {
return {
isOpened: false,
isScrolling: false,
timer: null
};
},
methods: {
getScrollTop() {
// 兼容不同的浏览器
return (
document.documentElement.scrollTop ||
window.pageYOffset ||
document.body.scrollTop
);
},
setScrollTop(val) {
document.documentElement.scrollTop &&
(document.documentElement.scrollTop = val);
window.pageYOffset && (window.pageYOffset = val);
document.body.scrollTop && (document.body.scrollTop = val);
},
onScroll() {
const scrollTop = this.getScrollTop();
this.isOpened = scrollTop > 0;
},
onClick() {
if (this.isScrolling) {
return;
}
this.isScrolling = true;
// 50px/17ms速度实现滚动
this.timer = setInterval(() => {
let scrollTop = this.getScrollTop();
scrollTop = scrollTop - 50;
this.setScrollTop(scrollTop > 0 ? scrollTop : 0);
if (scrollTop <= 0) {
clearInterval(this.timer);
this.isScrolling = false;
}
}, 17);
}
},
mounted() {
window.addEventListener("scroll", this.onScroll);
}
};
</script>
<style lang="less" scoped>
.back-to-top {
position: fixed;
z-index: 9999;
right: 2.5%;
bottom: 2.5%;
cursor: pointer;
width: 60px;
height: 60px;
background-image: url("../assets/images/btn_up1.png");
background-size: 100% 100%;
background-position: 100% 100%;
&:hover {
background-image: url("../assets/images/btn_up2.png");
}
}
</style>
基于vue实现back-to-up
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...