滚动丝般顺滑
This commit is contained in:
parent
46f5556257
commit
c30aed06c7
@ -2,7 +2,7 @@
|
||||
<div class="mod-side-operation">
|
||||
<% if (theme.top){ %>
|
||||
<div class="jump-container" id="js-jump-container" style="display:none;">
|
||||
<a href="javascript:void(0)" >
|
||||
<a href="#top" >
|
||||
<i class="icon icon-chevron-up"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@ -15,6 +15,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mid-col" :class="{show: isShow,hide: isShow!==undefined && !isShow}">
|
||||
<a name="top"></a>
|
||||
<%- partial('_partial/mobile-nav', null, {cache: !config.relative_link}) %>
|
||||
<div id="wrapper" class="body-wrap" v-pre>
|
||||
<div class="menu-l">
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
}
|
||||
|
||||
.article {
|
||||
margin: 30px;
|
||||
margin: 0 30px 30px;
|
||||
position: relative;
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
|
||||
@ -20,7 +20,8 @@ html, body, #container {
|
||||
#container{
|
||||
position:relative;
|
||||
min-height:100%;
|
||||
background: linear-gradient(200deg,#5aa5c6,#a4854b);
|
||||
background: linear-gradient(200deg,#5aa5c6,#a4854b);
|
||||
scroll-behavior: smooth;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
overflow-scrolling: touch;
|
||||
.anm-canvas {
|
||||
@ -32,6 +33,7 @@ html, body, #container {
|
||||
}
|
||||
}
|
||||
.body-wrap{
|
||||
padding-top: 30px;
|
||||
margin-bottom: 80px;
|
||||
}
|
||||
.mid-col {
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
.body-wrap {
|
||||
padding-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.left-col {
|
||||
|
||||
@ -1,46 +1,48 @@
|
||||
var backTop = function (domE, ctn, distance) {
|
||||
if (!domE) return;
|
||||
var timer = null;
|
||||
var _onscroll = (ctn || window).onscroll,
|
||||
_onclick = domE.onclick;
|
||||
(ctn || window).onscroll = throttle(function () {
|
||||
typeof _onscroll === 'function' && _onscroll.apply(this, arguments);
|
||||
toggleDomE();
|
||||
}, 100);
|
||||
domE.onclick = function () {
|
||||
typeof _onclick === 'function' && _onclick.apply(this, arguments);
|
||||
timer = setInterval(function () { //设置一个计时器
|
||||
var ct = ctn.scrollTop || document.documentElement.scrollTop || document.body.scrollTop; //获取距离顶部的距离
|
||||
var diff = Math.max(10, ct / 6);
|
||||
ct -= diff;
|
||||
if (ct > 0) {//如果与顶部的距离大于零
|
||||
ctn.scrollTop = ctn.scrollTop - diff;
|
||||
window.scrollTo(0, ct);//向上移动10px
|
||||
} else {//如果距离小于等于零
|
||||
ctn.scrollTop = 0;
|
||||
window.scrollTo(0, 0);//移动到顶部
|
||||
clearInterval(timer);//清除计时器
|
||||
}
|
||||
}, 10);//隔10ms执行一次前面的function,展现一种平滑滑动效果
|
||||
};
|
||||
if (!domE) return
|
||||
var timer = null
|
||||
var _onscroll = ctn.onscroll
|
||||
ctn.onscroll = throttle(function () { // 滚动到一定高度才显示"回到顶部"按钮
|
||||
typeof _onscroll === 'function' && _onscroll.apply(this, arguments)
|
||||
toggleDomE()
|
||||
}, 100)
|
||||
if(!window.getComputedStyle || window.getComputedStyle(ctn).scrollBehavior === undefined) {
|
||||
// 浏览器不支持scroll-behavior属性
|
||||
domE.querySelector('a[href="#top"]').addEventListener('click', function (event) {
|
||||
event.preventDefault()
|
||||
timer = setInterval(function () { //设置一个计时器
|
||||
var ct = ctn.scrollTop || document.documentElement.scrollTop || document.body.scrollTop //获取距离顶部的距离
|
||||
var diff = Math.max(10, ct / 6)
|
||||
ct -= diff
|
||||
if (ct > 0) {//如果与顶部的距离大于零
|
||||
ctn.scrollTop = ctn.scrollTop - diff
|
||||
window.scrollTo(0, ct)//向上移动10px
|
||||
} else {//如果距离小于等于零
|
||||
ctn.scrollTop = 0
|
||||
window.scrollTo(0, 0)//移动到顶部
|
||||
clearInterval(timer)//清除计时器
|
||||
}
|
||||
}, 13)//隔13ms执行一次前面的function,展现一种平滑滑动效果
|
||||
})
|
||||
}
|
||||
|
||||
function toggleDomE() {
|
||||
domE.style.display = (ctn.scrollTop || document.documentElement.scrollTop || document.body.scrollTop) > (distance || 500) ? 'block' : 'none';
|
||||
domE.style.display = (ctn.scrollTop || document.documentElement.scrollTop || document.body.scrollTop) > distance ? 'block' : 'none'
|
||||
}
|
||||
function throttle(func, wait) {
|
||||
var timer = null;
|
||||
var timer = null
|
||||
return function () {
|
||||
var self = this, args = arguments;
|
||||
if (timer) clearTimeout(timer);
|
||||
var self = this, args = arguments
|
||||
if (timer) clearTimeout(timer)
|
||||
timer = setTimeout(function () {
|
||||
return typeof func === 'function' && func.apply(self, args);
|
||||
}, wait);
|
||||
return typeof func === 'function' && func.apply(self, args)
|
||||
}, wait)
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function init() {
|
||||
backTop(document.getElementById('js-jump-container'), document.getElementById('container'));
|
||||
backTop(document.getElementById('js-jump-container'), document.getElementById('container'), 300)
|
||||
}
|
||||
|
||||
export default { init }
|
||||
Loading…
x
Reference in New Issue
Block a user