[英]JS Smooth scrolling, scroll to bottom of final / bottom div instead of top
[英]vue.js smooth scroll to middle, bottom and back top top with arrow keys
我想使用向上和向下箭头键来平滑向下和向上滚动页面。
第一次按下按键应该将我带到中间(50%),
第二次向下按键到页面底部
向上键反之亦然。
这可以用vue吗?
这应该可以通过vue.js
和/或某些JavaScript
。 如果您想将此操作绑定到某些html
元素,您应该查看KeyCode Modifiers ,您可以在其中选择将它们绑定到v-on
。 如果您只想使用一些JavaScript
而不将操作绑定到vue.js
,它可能是这样的:
document.onkeydown = keyDownFunc;
function keyDownFunc(e) {
e = e || window.event;
if (e.keyCode == '40') {
// do something
}
}
在这种情况下, 40
是arrow down
。 要获取您的密钥代码,只需访问: keycode.info 。
纯 javascript 可以做到这一点,因此 vue 也可以
看看这个例子
首先,注意这个方法:
scrollView(amount) {
let scrollFromTop = window.pageYOffset;
const viewHeight = Math.round(window.innerHeight * Math.abs(amount));
if (scrollFromTop % viewHeight === 0) scrollFromTop += Math.sign(amount);
let targetPos;
if (amount > 0)
targetPos = Math.ceil(scrollFromTop / viewHeight) * viewHeight;
else
targetPos = Math.floor(scrollFromTop / viewHeight) * viewHeight;
window.scrollTo({
top: targetPos,
behavior: "smooth"
});
}
它从顶部确定视图高度和当前滚动。 然后,它根据提供的数量和视图大小向上或向下滚动页面。
注意:某些浏览器尚不支持平滑滚动,如果您决定实施此解决方案,则应使用smoothscroll-polyfill 。
接下来看看这几个负责关键事件监听的钩子:
mounted() {
window.addEventListener("keydown", this.keyHandler);
},
beforeUnmount() {
window.removeEventListener("keydown", this.keyHandler);
}
最后但同样重要的是,事件处理逻辑:
keyHandler(e) {
if (e.key === 'ArrowDown') {
e.preventDefault();
this.scrollView(this.scrollAmount);
}
if (e.key === 'ArrowUp') {
e.preventDefault();
this.scrollView(this.scrollAmount * -1);
}
},
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.