javascript - Javascript:切换自动向上或向下滚动
问题描述
我有一个页面,其中包含一个按钮和两个位于页面底部附近的单选按钮。我的目标是创建一个由向上或向下滚动页面的按钮触发的功能,具体取决于两个单选按钮是否处于活动状态。一旦用户选择了这两个单选按钮,按钮就会滚动到页面顶部。提供的代码段包含我到目前为止的代码。一旦激活了两个单选按钮,我希望“向下滚动”代码不再起作用,只需让按钮将用户移动到页面顶部。它在本示例和 Firefox 中按预期工作,但 chrome 和 edge 无法解释它。在这些浏览器中,页面在顶部时会滚动到底部,考虑到“向下滚动”代码位于函数的开头,这是有道理的。
function Push() {
window.scrollTo(0,document.body.scrollHeight);
if(mode1.checked) {
if(mode2.checked) {
window.scrollTo({top: 0});
}}}
<style>
html {
height: 500px;
}
</style>
<body>
</br></br></br></br></br></br></br></br></br></br></br>
<div align="center">
<button id="button01" onclick="Push()">Push</button>
</div>
</br></br></br></br></br></br></br></br></br></br></br></br>
<div align="center">
<form id="mode">
<label><input type="radio" id="mode1"/></label>
<label><input type="radio" id="mode2"/></label>
</form>
</div>
</body>
解决方案
你写它的方式;当两个无线电都被选中并调用 Push() 函数时,页面将先滚动到底部,然后再滚动到顶部。它发生得如此之快,你没有注意到它(至少我没有注意到),但代码说这正在发生。
编辑:我确实通过在 codepen 中通过设置断点来测试证明了这一点:window.scrollTo({top: 0});
. 当它在这里中断时,它滚动到底部,然后当我进入下一个函数调用时,它滚动到顶部。
我会像这样更改 Push() 函数:
function Push() {
if(mode1.checked && mode2.checked) {
window.scrollTo({top: 0});
} else {
window.scrollTo(0,document.body.scrollHeight);
}
}
这样做只会触发一个滚动动作(向上或向下)。
似乎 IE 也不支持scrollTo
像您在此处所做的那样使用 with 选项:window.scrollTo({top: 0});
. 最好用window.scrollTo(0,0)
。我在下面的片段中使用了它。
这也可能是您的 Chrome 和 Edge 问题,具体取决于您正在测试的每个版本。看到这个:https ://caniuse.com/#feat=element-scroll-methods
最后一个值得注意的观察:由于单选按钮的设计功能,您目前无法“取消选中”单选按钮。我假设你知道这不是问题,但我想我会提到它。如果需要,使用复选框或自定义复选框将允许您完成此操作。还有其他方法可以实现这一点。
function Push() {
if(mode1.checked && mode2.checked) {
window.scrollTo(0,0);
} else {
window.scrollTo(0,document.body.scrollHeight);
}
}
html {
height: 500px;
}
<html>
<body>
</br></br></br></br></br></br></br></br></br></br></br>
<div align="center">
<button id="button01" onclick="Push()">Push</button>
</div>
</br></br></br></br></br></br></br></br></br></br></br></br>
<div align="center">
<form id="mode">
<label><input type="radio" id="mode1"/></label>
<label><input type="radio" id="mode2"/></label>
</form>
</div>
</body>
</html>
推荐阅读
- xml - how to pass values from a one2many field to another field in different model of same form? form view image given below (ial)
- jquery - 当子 li 被按下时如何停止父级的切换类?
- amazon-s3 - How to serve a static html that has a php extension with S3?
- javascript - 使用 Jquery Validator 和 Sweetalert 进行表单提交确认框
- python - TypeError:non_max_suppression() 得到了一个意外的关键字参数“score_threshold”
- r - visreg:在一个图中覆盖两个模型
- sorting - 角材料表排序行为导致错误的顺序
- bash - Bash script error "unexpected token" determining php command
- node.js - git status 没有显示我更改的文件
- c++ - 将语言环境设置为用户首选的语言环境,除了 std::locale::numeric