マイレイアウトの1つに、いくつかの大きな画像(XMLから取得)があり、リンクの一部にマウスを置いたときに表示されますが、ページが読み込まれ、ロールオーバーされると、その画像の読み込みに時間がかかります。
注:修正5つの画像があります(動的ではありません)
JavaScriptを使用して画像をプリロードしたくない
私はホバーメニューなどを使用していませんが、この画像は製品画像であり、リンクはテキストリンクですポイントを取得しましたか?
から http://snipplr.com/view/2122/css-image-preloader
CSSのみを使用するローテクだが便利なテクニック。 CSSをスタイルシートに配置した後、これをページのbodyタグのすぐ下に挿入します。ページ全体で画像が参照されるときはいつでも、画像がキャッシュから読み込まれます。
#preloadedImages
{
width: 0px;
height: 0px;
display: inline;
background-image: url(path/to/image1.png);
background-image: url(path/to/image2.png);
background-image: url(path/to/image3.png);
background-image: url(path/to/image4.png);
background-image: url();
}
HTML5には、link prefetching
によってこれを行う新しい方法があります。
<link rel="prefetch" href="http://davidwalsh.name/wp-content/themes/walshbook3/images/Sprite.png" />
HTMLで必要なだけlink
タグを追加するだけで問題ありません。もちろん、古いブラウザはこの方法でコンテンツをロードしません。
注上記のコードはApple Safari safariは現在のバージョン12までプリフェッチをサポートしていません https ://caniuse.com/#search=prefetch
[〜#〜]更新[〜#〜]
サーバーにHTTP2が提供されている場合は、応答にLink
ヘッダーを追加して、 HTTP2サーバープッシュ を使用することもできます。
Link: <http://davidwalsh.name/wp-content/themes/walshbook3/images/Sprite.png>; rel=preload; as=image;
画像をプリロードする必要はありません。 99%の人がホバー効果で2つの画像を使用する必要があると考える理由を理解できません。そのような必要はなく、2つの画像を使用すると見栄えが悪くなります。私が知っている唯一の良い解決策は、A要素にCSSを使用することです(または他のすべてのボタンに簡単なJS)。ボタンをホバーすると、背景の位置がオフセットに設定されます。
a { display:block; width:160px; height:26px; background:url(b_tagsdesc.png); }
a:hover { background-position:0 26px }
それがすべてです、使用した画像は以下で確認できます:
(ソース: margonem.pl )
編集:他の方法でも使用できます。画像を切り替える代わりに、画像を非表示にすることができます。したがって、開始点は "background-position:0 -100px"で、ホバー "0 0"になります。
この手法はCSSスプライトと呼ばれます-これはその良い説明です: http://css-tricks.com/css-sprites/
ここではまだ触れていませんが、IE6と7を気にする必要がない場合にうまく機能するテクニックは、:after
疑似セレクターを使用して、画像をcontent
としてページの要素に追加します。以下のコードは この記事 から解除されました:
body:after {
content: url(img01.jpg) url(img02.jpg) url(img03.jpg);
display: none;
}
JavaScriptを使用して画像をプリロードする場合と比較して、これについて私が見られる唯一の欠点は、画像をメモリから解放する簡単な方法がないことです。
非表示のdivを使用して画像を配置できます。
<html>
<body>
<div style="width:1px; height:1px; visibility:hidden; overflow:hidden">
<img src="img1.jpg" /><img src="img2.jpg" />
</div>
<div>Some html</div>
</body>
</html>
ただし、これは画像に対してのみ機能します。たとえば.swfファイルに対して同じことを行おうとすると、問題が発生します。 Firefoxは、.swfファイルが表示されていない場合は実行しません。
非表示のimgタグで画像を参照します。ページの読み込み中にもダウンロードされます。
画像のプリロードが目的の場合は、パフォーマンスが必要です。リソースのロードがあなたが望むものである間、私はページをブロックすることを疑います。つまり、本文の最後にいくつかのプリフェッチリンクを配置し、それらに偽のメディアを追加して、重要でないように見えるようにします(他のすべての後にロードされるようにするため)。次に、それらのリンクにonloadタグを追加します。そのonloadには、ページ内の実際のリソースのソースを設定するコードが含まれます。たとえば、動的iframeと組み合わせて使用することもできます。
<a onclick="myFrame.style.opacity=1-myFrame.style.opacity;myFrame.src='http://jquery.com/'">
Click here to toggle it
</a><br />
<iframe id="myFrame" src="" style="opacity: 0"></iframe>
<a onclick="myFrame.style.opacity=1-myFrame.style.opacity">
Click here to toggle it
</a><br />
<iframe id="myFrame" src="" style="opacity: 0"></iframe>
<link rel="prefetch" href="http://jquery.com/"
onload="myFrame.src=this.href" media="bogus" />
最初の(前に)ページがフリーズして非常に醜い方法で点滅するのに対し、コンテンツがプリロードされた2番目の(後)はページをフリーズまたは点滅させず、シームレスに瞬時に表示および非表示になることに注意してください。
非表示の画像が読み込まれているかどうかはわかりませんので、おそらく image sprites を使用することをお勧めします。次に、何も表示される前にイメージ全体がロードされます。すべてのメニュー項目を1つの画像に配置して、多くのHTTPリクエストを保存することもできます。
それらを<img />
タグとしてページに追加し、CSSを使用して非表示にできませんか?