【问题标题】:How to avoid scroll to the focussed element如何避免滚动到焦点元素
【发布时间】:2017-04-18 12:07:46
【问题描述】:

所以,我有一个输入 type=text 用作搜索。

搜索会自动滚动到长列表中找到的项目(因此输入在屏幕之外),但是当我继续输入时,在跳转到第一个找到的结果后,它会回到输入的位置。我想避免这种行为。

https://jsfiddle.net/ptjnr93q/

请看上面的jsfiddle。

var cont = 0;
var fill = "test";
for (cont = 0; cont < 1000; cont++) {
    $("body").append(fill + "<br>");
	console.log("e");
}

$("input").bind('focusin focus', function(e){
  e.preventDefault();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Type something in the input field, scroll down, and type again.<br>
The page scrolls up to the input again, I want to avoid it.<br>

<input type="text" class="search">
<br>

【问题讨论】:

  • 对不起,我迷路了。您如何再次重现该问题?
  • @RokoC.Buljan 在输入中输入内容,然后向下滚动,不要点击外部,现在,如果您继续输入,页面将向上滚动,我想避免这种行为
  • 从 UI/UX 的角度来看这很愚蠢。你应该让你的输入固定和浮动。这样我就可以看到我正在输入的内容...
  • window.onscroll = function() { $("input").trigger('blur'); }
  • @RokoC.Buljan 当然,但这并不能回答我的问题

标签: javascript html focus


【解决方案1】:

我提出了另一种实现目标的方法,即保持向下滚动的位置不变。

  • 将结果集保存在单独的 DIV 中。
  • 添加滚动到resultSet div,这样即使焦点移动到输入,你的scolled位置也不会受到影响

    var cont = 0;
    var fill = "test";
    for (cont = 0; cont < 1000; cont++) {
        $("#resultSet").append(fill + cont + "<br>");
    	//console.log("e");
    }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="text" class="search">

    <br>
    
    <div id="resultSet" style="height:200px; overflow:scroll;"></div>

【讨论】:

  • @Dunnow,这有帮助吗?
  • 它会,但这意味着改变在网站各处使用的组件的结构,这可能是不可行的:S
  • 您的页面将用于安卓设备?还是在 PC 中?如果您的目标是 android 设备,则可以使用多种方法。
  • 它应该只用在电脑上,或者主要只用在电脑上,你可以通过安卓设备访问它,但它还不是一个响应式网站,大多数应用程序都有专门用于手机的屏幕
  • @Dunnow,试试这个,我想,这将是一个小改变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2017-11-30
  • 1970-01-01
相关资源
最近更新 更多