2012-04-25 4 views
3

私はスプライトシートアニメーションを使用しているので、背景イメージとして設定する必要がある私が作業しているサイト上のボタンがあります。アニメーションが再生されるまで数秒で他のページへのリダイレクトを遅らせるには、ボタンを定期的にクリックする必要がありますが、中マウスのクリックが遅れなく新しいタブで機能することを望みます。ミドルクリックJS機能

現在、私はこれをJavascriptで動作させていますが、すべてのことがそのように扱われ、hrefを持たないことはかなり悪い考えです。

だから私はこの作った:アイデアは、通常のクリック機能をトリガし、中央のマウスクリックだけでhrefのリンクにまっすぐ行くのに対し、遅延を被るということで

<script type="text/javascript"> 

    function delayed(){ 
    window.stop(); 
    setTimeout('window.location = "http://www.dog.com";', 800);} 

    </script> 

<a href="http://www.google.com" onclick="delayed();return false">I am a link</a> 

を。

これはFirefoxで動作します。しかし、ChromeとSafariでは、中クリックが機能をトリガーし、その結果、同じウィンドウ内に犬のリンクが開きます(完成バージョンではリンクは同じです)。

基本的には、クリックで遅れても、通常は中間クリックで機能するhrefが必要です。私の作業ソリューションは、JavaScriptを使って中クリックで新しいタブを開きますが、これはブラウザの設定を上書きする可能性があり、おそらく悪い考えです。

EDIT:ところで

私はjqueryのを使用して、この解決策発見した:

$(document).ready(function() { 
     $(".delayed").click(function() { 
     var href = $(this).attr('href'); 
     setTimeout(function() {window.location = href}, 800); 
     return false; 
    }); 
}); 

...とHTML:これは働いたが、同じ問題が発生した

<a href="http://www.google.com/" class='delayed'></a> 

をChromeは中間クリックを左クリックとして扱い、それを同じウィンドウで開きます。

私は今、sransaraからのコンテンツを含めるように変更しました。だから...すべてが解決されたと思います。再度Jqueryを使用:

$(document).ready(function() { 
     $(".delayed").click(function(event) { 
      var href = $(this).attr('href'); 
      if(event.button == 0){ 
     event.preventDefault ? event.preventDefault():event.returnValue = false; 
     setTimeout(function() {window.location = href}, 800);  
     } 
    }); 
}); 

すべてのブラウザで動作するようです。うまくいけば、これらは今後このページにつまずく人にとっては役に立つかもしれません。

+1

サイドノート: 'setTimeout'(' eval'を使用)に文字列を渡さず、関数を渡します。 'setTimeout(function(){window.location =" http://www.dog.com ";}、800);' –

+0

ありがとう、私の最後に更新されました。 – Sasha

答えて

1

これは簡単な解決策ですが、私はあなたの必要性に最も適していると思います。

HTML anchorタグのコード:ここで

<a href="http://www.google.com" onclick="delayed(event);">I am a link</a> 

はJavascriptを次のとおりです。

function delayed(event){ 
    window.stop(); 
    if(event.button == 0){ 
     event.preventDefault ? event.preventDefault():event.returnValue = false; 
     setTimeout(function(){ window.location = "http://www.yahoo.com"; }, 800); 

    } 
} 

いくつかの簡単な変更があります。

  • 私はonclickからreturn falseを削除したが、イベントですが、新しいコードラインevent.preventDefault ? event.preventDefault():event.returnValue = false;,prevents default action左クリックしたとき。
  • button code checkをJavascriptに追加しました。

作業デモコードはhereです。

これは簡単な解決策です。改善のための領域は次のとおりです。 インラインonclickイベントを取り出し、JSで動的にイベントリスナーを追加します。

+0

ありがとうございます。私は、私が現在実装している(以下に掲載)別の解決策を見つけました。これは仕事をうまく行い、onclickを使わないようにしています...しかし、これはまだjavascriptが関わっているときChromeの中間クリックが左クリックとして機能するようです。私はこのソリューションを私自身と組み合わせることができます(私は自分自身で言う、私はそれをオンラインで見つけました)... – Sasha

+0

助けてくれてありがとう。興味があれば、元の投稿にあなたのコードの修正版を加えました。 – Sasha