1

Google.com にアクセスして検索バーに文字を入力すると、すぐに別のページに移動するようです。この間、できるだけ速く入力しても、Google は 1 文字も失うことはありません。

これを keyup() イベントと setinterval() でエミュレートしようとしましたが、ページをロードするまでに 1 文字か 2 文字を失うことになります。

$(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);
   }
});

これは私が現在使用しているコードです。動作しますが、次のページに移動するときにキープレス/キーアップを失う可能性があります。

Googleがどのようにそれを行うか、または何か提案があることを知っている人はいますか?

ありがとう

4

3 に答える 3

7

別のページに移動したと思いますが、実際はそうではありません。新しい(かっこいい!)HTML5機能popを使用して、履歴スタックで/を使用します。push

ページがリロードされることはないため、文字が失われることはありません。

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 に答える