実践経験: H5 単一ページ切り替えを迅速に構築skeleton_html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 11:28:26
オリジナル
1306 人が閲覧しました

Web アプリとハイブリッド アプリの時代では、より良いユーザー エクスペリエンスを実現するために、シングル ページ アプリケーションが「SPA」、つまりシングル ページ アプリケーションと呼ばれるようになりました。は 1 つの HTML ページのみを持つアプリケーションであり、アプリケーション内のすべてのビューはこの HTML ページに含まれており、関連するビューの表示と非表示は JavaScript によって制御されます。このモードでは、ユーザーは Web でネイティブ アプリの速度とスムーズさを体験できます。アプリ。この記事の目的は、H5 単一ページ切り替えスケルトンをすばやく構築する方法を説明することです。

1. ページのデザイン

SPA アプリケーションを構築するときは、最初にアプリケーションにどのビューを含める必要があるかを決定する必要があります。ここでは、問題を説明するために、ホームページとリストの 3 つのビューのみを構築する必要があります。ページとリスト詳細ページ。 これら 3 つのページ間の論理関係は次のとおりです:

(1) プログラムが開始すると、デフォルトでホームページに入ります

(2) ホームページ上のボタンをクリックしてリスト ページに切り替えます

(3)一覧ページのボタンをクリックすると一覧詳細ページに切り替わります

(4)戻るボタンまたは物理リターンキーをクリックして前のページに戻ります。

まず、コア HTML コードを見てみましょう:

<body>    <div class="pageview" style="background: #3b76c0" id="-main-view">        <h3>首页</h3>        <div title="-list-view" class="right-arrow"></div>    </div>    <div class="pageview" style="background: #58c03b;display: none" id="-list-view">        <h3>列表页面</h3>        <div class="left-arrow"></div>        <div title="-detail-view" class="right-arrow"></div>    </div>    <div class="pageview" style="background: #c03b25;display: none" id="-detail-view">        <h3>列表详情页面</h3>        <div class="left-arrow"></div>    </div></body>
ログイン後にコピー

class=`pageview` を持つ div コンテナーには、本文にそのような div が 3 つ含まれていることに注意してください。 div はすべて style=`display:none` で設定されていますが、最初のビューは設定されていません。この目的は、プログラムの起動時にデフォルトでホームページを表示することです。

このコードでは、各ビューのスタイルと切り替え効果を記述するために共通の CSS クラスが使用されています。このクラスは `pageview` です。まず、ページビューがどのように定義されているかを見てみましょう。ビューをスムーズに切り替えるために、絶対位置と親コンテナと同じ幅と高さを設定する必要があります。また、ページ切り替えのトランジション効果を設定する必要があります。CSS3 の特定のパラメータを使用します。ここでは説明しませんが、誰もが理解できるはずです。このスタイル クラスによって生成される効果は次のとおりです。 -webkit-transform の値が変更されると、ページはスタイルで定義されたトランジション効果を使用して変換されます。これまでのところ、メイン ページのデザインは完了しています。 。

2. ロジック制御

ページ切り替えを実現するには、2 つのページが同時に移動するように制御する必要があります。つまり、現在のページが画面から出続け、新しいページが画面に入り続けるように制御する必要があります。説明の便宜上、元のページを「currentView」と呼び、エントリを適用するビューである新しいページを「applyView」と呼びます。変換で記述した場合、currentView を元の 0% から -100% に変換する必要があります。つまり、ページがページ幅の距離だけ左に変換される必要があります。同時に、appyView も元の 0% から -100% に変換する必要があります。元の 100% を 0% に変更します。これは currentView の元の位置を占めます。 もちろん、変換する前に、currentView と applyView の初期位置をそれぞれ 0% と 100% に設定する必要があります。

.pageview{   position: absolute;   left: 0;   top:0;   width: 100%;   height: 100%;   overflow: hidden;   -webkit-transition: 0.4s ease-out -webkit-transform;}
ログイン後にコピー

DOM クエリを減らすために、JS 操作を通じてページの DOM オブジェクトを取得する必要があることがわかりました。ページが読み込まれるときに、使用する必要があるすべてのページ オブジェクトを一度にクエリして保存します。 Map オブジェクトでは、キーと値のペアの形式で使用する必要があるため、キーに基づいて取得するだけで済みます。

//页面向左平移var currentViewStart = "translateX(0%)", //currentView初始位置   applyViewStart = "translateX(100%)", //applyView初始位置   currentViewEnd = "translateX(-100%)",//currentView的最终位置   applyViewEnd = "translateX(0%)";     //applyView最终位置//页面向右平移if (direction == "right") {   currentViewStart = "translateX(0%)";   applyViewStart = "translateX(-100%)";   currentViewEnd = "translateX(100%)";   applyViewEnd = "translateX(0%)"}
ログイン後にコピー

以下では、JS を使用してページの切り替え効果を制御します:

//初始化执行initViewPool:function(){   var views = document.querySelectorAll(".pageview");   //通过call使用数组的forEach来遍历NodeList   Array.prototype.forEach.call(views,function(item){       //viewPool是一个全局对象       viewPool[item.id] = item; //将DOM的id作为键   });},
ログイン後にコピー

ここで重要な操作は次のとおりです: 最終位置を設定する操作はタイマー、つまり t1 に配置する必要があります。初期位置を設定した後、このスタイルを「レンダリング」するには一定の時間がかかります。2 番目のタイマーは、現在のページの設定、ハッシュの設定、タイマーのクリアなどの関連操作を実行する前に、アニメーションが完了するまで待機します。等このコードを実行すると、設定した効果でページがスムーズに移動します。最後に、現在のページが非表示になり、新しいページで現在のページが画面の中央に表示されるように設定され、単一のページ切り替え効果が完成します。

3. 物理キーリターンのサポート

単一ページの切り替えであるため、別の質問、つまり物理リターンキーの操作を尋ねる必要があります。実際、単一ページの切り替えはページの表示と非表示の操作に過ぎず、本当の意味でのハッシュ ジャンプではありません。物理キーのリターンは実際にはブラウザのハッシュの変更を監視するためのものです。単一ページが物理キーをサポートできるようにするには、戻り操作の場合、ブラウザーのハッシュ変更をシミュレートする必要があります。つまり、新しいページに入ると、物理戻り時に現在のアドレスに #ハッシュ マークが追加されます。キーがクリックされると、ハッシュ値が変更され(前のページに戻ります)、同時に hashchange イベントがトリガーされ、ハッシュの変更が検出されると、前のページに切り替わります。 JS を介してハッシュすることで、物理的なリターン キーの効果を実現します。

//获取当前页面的DOM对象var currentView = viewPool[currentViewId];//获取新页面的DOM对象var applyView = viewPool[pageId];//设置新页面的初始位置applyView.style.webkitTransform = applyViewStart;//设置当前页面的初始位置currentView.style.webkitTransform = currentViewStart;//设置新页面显示applyView.style.display = "";var t1 = setTimeout(function(){   //当设置最终位置时,页面就会以过渡效果平移到最终位置   applyView.style.webkitTransform = applyViewEnd;   currentView.style.webkitTransform = currentViewEnd;},200);var t2 = setTimeout(function(){   //400ms后,页面平移结束,设置currentView为隐藏   currentView.style.display = "none";   //将新页面设置为当前页面   currentViewId = pageId;   if (direction === 'left'){       window.location.hash = currentViewId.substring(1);   }      window.clearTimeout(t1);   window.clearTimeout(t2);},600);
ログイン後にコピー

ハッシュ変更の監視の処理:

if (direction === 'left'){   //当进入到新页面时,设置当前hash的值为当前页面的id   window.location.hash = currentViewId.substring(1);}
ログイン後にコピー

上記は、単一ページ切り替えの基本的な考え方です。対応する完全なサンプル コードは github: https://github.com/git-onepixel/h5spa にアップロードされています。デバッグと学習のために完全なコードをダウンロードできます。エフェクトのデモンストレーションを表示する必要がある場合は、クリックするか、WeChat を使用して以下の QR コードをスキャンしてアクセスしてください:

例は参照と学習のみを目的としており、他の目的にコピーしたり使用したりすることはできません。

by @一ピクセル ブログパーク 2016.01

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート