1

如果您访问 Google.com 并在搜索栏中输入一个字母,它似乎会立即将您带到另一个页面。在此期间,您可以尽可能快地输入,而且 Google 不会丢失一个字符。

我已经尝试使用 keyup() 事件和 setinterval() 来模拟它,但在加载页面时我仍然会丢失一两个字符。

$(document).ready(function(){
var timer;$("input#q").keyup(
  function(e){
  var str = $("input#q").val();
  if(str.length > 1){
    clearInterval(timer);timer = setTimeout(
      function(){var url = "/search/?q="+encodeURI($("input#q").val());
      location.href = url;}, 210);
   }
});

这是我目前正在使用的代码,它可以工作,但在将您转移到下一页时可能会丢失按键/按键。

有谁知道谷歌是怎么做的或有什么建议?

谢谢

4

3 回答 3

7

你以为你被传送到另一个页面,但实际上不是。它使用pop/push在历史堆栈中,使用新的(酷!)HTML5 功能

该页面永远不会重新加载,因此您不会丢失任何字符。

当您浏览存储库时,Github 也会使用它。

于 2012-09-17T11:58:09.257 回答
1

输入的捕获实际上是在同一个<input>控件中完成的,它只是通过更改 CSS 定位来移动。没有页面转换,只有 JavaScript 对按键做出反应,然后相应地操纵样式。

在后台触发了 AJAX 事件以执行增量搜索(如果您为 Google 启用了该选项),您可以查看是否使用可以显示网络流量的浏览器,例如 Chrome。

于 2012-09-17T12:12:36.807 回答
0

从我在使用 google.com 时看到的情况来看,在您离开搜索框之前,它们实际上并没有改变栏中的位置。此时,它会快速更改页内锚点(# 之后),这不会触发页面的完全重新加载。

于 2012-09-17T11:58:58.583 回答