不正なアタックだと誤解されない為にも、画像付きの過去の投稿の履歴一覧を遅延表示しますか?
プリプロセッサー
直前の記事: 「記事内のIMGタグ要素をブラウザー表示前に変更できる!」の、おさらいです。 筆者のWordPressのサイドメニューに実装したウィジェトです。 直前の記事で話題にしました、プリプロセッサーのみを以下のiFrameに実装しただけです。プリプロセッサーが担っている役目とは、表示するを押すと外部JavaScriptファイルを読み込み、読み込んだJavaScriptHTMLデーターから、画像を全て縦横3ピクセルの透過GIF画像に置き換えています。あなたのブラウザーでは如何でしょうか? プリプロセッサーのみですが、正常に機能していますか? 正解は:「表示するをクリックすると文字だけが表示される。」ステップアップテスト
同じく、筆者のWordPressのサイドメニューに実装したウィジェトです。 前段の項目と同じプリプロセッサーを以下のiFrameに実装し、デフォルメ気味のポストプロセッサーをテスト用に追加しています。
- iFrame内の表示するを押すと、HTMLデーターを流し込むJavaScriptファイルを読んで、そのJavaScriptファイルに定義されているメインの関数内で起動されるポストプロセッサーはゼロ秒後に活動します。
- window.addEventListener( "scroll", function(){} )
- iFrame内のスクロールの検出は1秒ごとに処理されます。
- window.addEventListener( "scroll", function(){} )
- iFrame内のスクロールの検出によって、一つの画像毎に処理します。
- 直前のwindow.pageYOffsetと比較して:
- iFrame内のスクロールの方向を検出し、上から、又は下から、一つの画像毎に処理します。 以下のポストプロセッサーで機能すれば面白い表現になるかも知れません。
ポストプロセッサー
同じく、筆者のWordPressのサイドメニューに実装したウィジェトです。 前段の項目までは、Y軸方向の判定が抜けていました。 判定の為のDIVタグを追加し、このポストプロセッサーでは判定処理を行っています。 判定領域内の画像を一気に表示させています。
- <div id="BaseDiv4Lasy" style="margin:0;padding:0;border:0;width:110%;position:fixed;top:50px;left:-10px;right:-10px;bottom:50px;border:dotted pink;" border=1></div>
- 各画像の近接関係を測定する為の
基礎となる矩形を、 iFrame内のスクロールに全く影響しない position:fixed;
で事前に定義しておく。 この定義はiFrameタグ内デバッグ用の専用DIVタグです。 定義した場所は JavaScriptファイルを 読み込む為の 静的HTMLファイル内の <BODY>タグの 直下です。 今回は iFrameの上下に 50ピクセルづつの 余白を 空けたが、 本番では 適宜 position:fixed;
配下の<DIVタグ内の 各パラメーターで 調整可能。 デバッグなので、色はピンク色としたが、本番では無色が良いだろう。 別に矩形に囚われない。 一本の縦線で良いだろう。 広さのあるDIVタグを指定すると「クリック出来ない」などの迷路に入り込む。 - 各画像の近接関係を測定する為の
- 画像の判定は3種類を想定している。関数内で新たなローカル関数を定義し、その関数で判定しています。
function Judge2021(BaseDiv,IMGELM){} 後述で 紹介しています。 - 画像の上部頂点( element.getBoundingClientRect().top )以後TOPと称す。
TOPが id="BaseDiv4Lasy" の、 内側に存在する場合。 - 画像の下部頂点( element.getBoundingClientRect().bottom )以後BOTと称す。
BOTが id="BaseDiv4Lasy" の、 内側に存在する場合。 - 画像のTOPが、
id="BaseDiv4Lasy" の、 上側に存在し ( <=
)、尚且つ、画像のBOTが、id="BaseDiv4Lasy" の、下側に存在する場合 ( >=
)。
- window.addEventListener( "scroll", function(){} )
- iFrame内のスクロールの検出は1秒ごとに処理されます。
- window.addEventListener( "scroll", function(){} )
- スクロール検出によって、順方向の場合は上から、逆方向を検出したら下から画像を順次表示します。
後から読み込まれるJavaScriptファイル内の、メインである関数内で定義した、今回のプリプロセッサーと、その直後に追加したポストプロセッサーは次の通りです。 JavaScriptファイルを読み込む静的HTMLファイルの構文には、<span id="RecentPosts2020">と言うSPANタグのセットが存在する! このSPANタグの内側にJavaScriptファイルのHTML構文を記憶したローカル変数
開発後の感想
座標についてインターネット検索してみて、多くの似通った記事があるが、ブラウザーの画面の原点からの距離を気にすると、迷路に入り込む。 どんな古いブラウザーでも正確にレポートすることに気を取られてしまう。 確かに訪問者のブラウザーの古さや亜流度は気になるが、今回の開発時における迷走と、その後の新たな発見と成功は、 .getBoundingClientRect()
だけを利用したところにある。 各ブラウザーの互換性: (Element.getBoundingClientRect() - Web API | MDN)
それと、
.getBoundingClientRect()
に、固執する訳なので、 .getBoundingClientRect()
を利用できるブラウザーなのかを判定し、仮に利用できない古いブラウザーであったなら、何らかのメッセージを残すしかない。例えば: function Judge2021(BaseDiv,IMGELM)
function Judge2021
をyuicompressorで一次圧縮しました。サイドバーメニュー
2021/11/06 11:00 a.m. JST 目下、テストとして、WordPressのサイドバーメニュー内の、「静的 – 最近の記事」について、プリプロセッサーとポストプロセッサーを機能させています。
同じブラウザーで、30日以内の再訪問の場合、既に保存されているキャッシュデーターを再利用しますので、ブラウザーのキャッシュをリセットするか、ブラウザーのシークレットウィンドで再訪問願います。- 緑の楕円で縁取られた「表示する」をクリックすると:
- .getBoundingClientRect()が機能しない亜流のブラウザー、または古いブラウザーの場合は:
- プリプロセッサーとポストプロセッサーを実行しません。 つまり、従来の通り一気に全ての画像を表示します。 警告文を前後に表示します。
警告文 あなたさまのブラウザーが遅延読み込み(英語: Lazy loading)が機能しません。 地球温暖化に知らぬ間に加担していることになりますでしょう? 過去記事: 「プロキシーサーバーを利用することは馬鹿なことか?!」を、読んで下されば、インターネット通信で無駄で無用なパケットを浪費することも地球温暖化に加担していることになりますでしょう?
最終的には、.getBoundingClientRect()が機能しない亜流のブラウザー、または古いブラウザーの場合、プリプロセッサーだけを機能させて、画像を1つも表示させない仕様に変更する計画です。 - この記事に限定して、右端に赤色の縦線が表示されます。
- 頑張って全ての画像を表示すれば、赤バーが消えて、removeEventListener()が機能します。
- 右端に(赤色の)縦線は、ブラウザーの画面の上下に、それぞれ50ピクセルの余白があります。 この余白を除いて、画像を認証し、表示します。
- 上から下へスクロールした場合は、上から表示し、下から上へスクロールした場合は、下から表示します。
- 画像は、個々の容量によって、また相手のサーバーの混雑さによって、そしてインターネット回線スピードによって、それら表示速度は様々です。
本体
iFrameはここに置いておきます。 さて、この記事を制御しましょう。 以下の構文を、追記用のJavaScriptファイルの関数外の先頭に定義します。
関数外の先頭に定義しましたが、YUICOMPRESSORで一次圧縮すると、YUICOMPRESSORの最大の特徴である一行化を行います。以下の様に一行化されます。
if(typeof BaseDiv4Lasy_=="undefined"){var BaseDiv4Lasy_}BaseDiv4Lasy_="BaseDiv4Lasy2022";document.write('<div id="'+BaseDiv4Lasy_+'" style="margin:0;padding:0;width:5px;position:fixed;top:50px;left:0;right:3px;bottom:50px;border-style:outset;border-color:gray;" border="1"></div>');もう治ったのなら良いのですけど、Google製のJSコンプレッサーだとバグがあって、関数外の typeof で用いる変数名を、勝手に一文字に変換していました。 流石にYahoo!のYUICOMPRESSORは正常です!
記事本文、記事の追記について、そのIMGタグとIFRAMEタグの遅延化につきましては、次の記事に譲ります。 コンセプトは「ブログの種類に束縛されない遅延読み込み(英語: Lazy loading)の実装」です。 WordPress、MovableType、プロバイダーが提供している無料ブログで、等しく遅延読み込み(英語: Lazy loading)を実現させることです。 記事本文の遅延読み込み(英語: Lazy loading)が叶いましたら、そのJavaScriptファイルをダウンロード出来る様にしましょうか?
FACEBOOK(Meta)
FACEBOOK(Meta)には画像をアップロードしていません! WordPressにも画像は一切アップロードしていません! FACEBOOK(Meta)の画像を変更する場合は、WordPressのカスタムフィールド内のURL値を変更し、FACEBOOK(Meta)で更新するだけです。 つまりFACEBOOK(Meta)の画像をリプレースするのは簡単です。 この項目はFacebook(Meta)が公開している共有機能を、そのまま利用しています。 であるにも関わらず、表示できない有名ブラウザーがあります。 それらブラウザーとは、表示できないのではなくて、表示させない処理を故意に行っている有名ブラウザーがあると言う意味です。 ことはFaceboookに限定しません。 様々なオープンな情報をブラウザーが、あなたに対して見えなくしている事実が問題です。 みなさんが、どのブラウザーを利用することについて、それは自由です! 著者は決してブラウザーについての選択について推奨はしませんが、このFacebookが表示されない現象を確認できたのなら、他のブラウザーを是非、試用してみてください! 気になる方は、過去記事「レスポンスを崩さない広告の埋め込みを考えない?」の項目「Facebookの EMBED」に
記事の改訂の 告知について
DISQUSコメントで 案内します。DISQUSコメントにログインし、DISQUSコメント枠の一番下段の左端のメール・シンボルをクリックすれば、DISQUSコメントがあれば自動的にメールで知らせてくれます。 再度クリックすれば、メール通知を停止できます。 記事末尾のDISQUSコメントの表示が小さくてスレッドのデザインが狭過ぎると思うなら、DISQUSコメント本尊に接続
してみてください。
サポートが必要ですか?
「無料サポート」に興味があれば
上の丸ボタンをクリック願います。
サーバーから9kbを受信しますのでお待ち願います。
※ DISQUSについては別管理ですので、毎回、最新のDISQUSを表示できています。 但し、ご自分のDISQUSコメントを編集した直後に編集後の内容に至らない場合がありますが、DISQUS表示の上部にある「あなたの言語でDISQUSメニューを再表示する!」をクリックしますと最新の状況を表示致します。 宜しくご理解願います。
Google Translator.
7 Pingbacks