Heim >Web-Frontend >js-Tutorial >Verwenden Sie natives JS, um eine Einzelseitenanwendung zu erstellen

Verwenden Sie natives JS, um eine Einzelseitenanwendung zu erstellen

高洛峰
高洛峰Original
2016-11-30 17:04:401158Durchsuche

Hauptidee

Springen Sie zum entsprechenden Modul, indem Sie den Hash-Wert der URL ändern. Zeigen Sie zunächst das Standardmodul an und blenden Sie die anderen Module aus. Wenn Sie auf die Option des Standardmoduls klicken, überwachen Sie gleichzeitig das Hash-Änderungsereignis im Fenster Führen Sie die entsprechende Modulsprunglogikverarbeitung durch. Auf diese Weise kann die Vorwärts- und Rückwärtsbewegung des Browsers simuliert werden und das Benutzererlebnis ist besser.

Schauen wir uns unten das Szenario genauer an. Die Auswahlreihenfolge lautet: Automarke->Automodell->Autoserie.

Zuerst der HTML-Teil. Die Auswahlliste der Fahrzeugmarke wird standardmäßig angezeigt, die anderen beiden Module sind ausgeblendet.

<div class="wrap">
  <div id="Brand">
    <div>品牌</div>
      <ul class="mycar_hot_list">
        <li>
          <p>大众</p>
        </li>
      </ul>
    </div>
    <div id="Type"  style="display:none">
      <dl>
      <dt>比亚迪汽车</dt>
      <dd>宋</dd>
    </dl>
  </div>
  <div id="Series" style="display:none">
    <ul class="mycar_datalist">
       <li>
         2013年款
       <li>
    </ul>
  </div>
</div>

JS-Logiksteuerteil

① Definieren Sie ein Variablenobjekt zum Speichern der in den drei Modulen ausgewählten Daten, definieren Sie den Hash-Wert und die Verarbeitungslogikfunktion des entsprechenden Moduls.

   info={
            brand:&#39;&#39;,
            carType:&#39;&#39;,
            carSeries:&#39;&#39;,
            pages:[&#39;Brand&#39;,&#39;Type&#39;,&#39;Series&#39;] 
        };
info.selectBrand=function(){
      document.title = &#39;选择商标&#39;;
      brandEvent();
}
//选择车型
info.selectType=function(){
      document.title = &#39;选择车型&#39;;
      document.body.scrollTop = 0;  //滚到顶部
       window.scrollTo(0, 0);
       typeEvent();  //为该模块的dom绑定事件或做其他逻辑
}
//选择车系
info.selectSeries=function(){
      document.title = &#39;选择车系&#39;;
      document.body.scrollTop = 0;
      window.scrollTo(0, 0);
      seriesEvent();
}

②dom-Bindungsereignisse und andere Logik

  function brandEvent(){
//绑定跳转
   $(&#39;#Brand ul li&#39;).click(function(){
       info.brand=$(this).find(&#39;p&#39;).text();
       goPage(&#39;Type&#39;);
   })
  }
  function typeEvent(){
//绑定跳转
   $(&#39;#Type  dd&#39;).click(function(){
       info.carType=$(this).text();
       goPage(&#39;Series&#39;);
   })
  }
  function seriesEvent(){...}

③goPage-Logiksprungsteuerung

function goPage(tag) {
    if ((tag == &#39;Brand&#39;)&&(location.hash.indexOf(&#39;Type&#39;)!=-1)){ // 后退操作
            history.back();
            document.title = &#39;选择商标&#39;; 
    }else if ((tag == &#39;Type&#39;)&&(location.hash.indexOf(&#39;Series&#39;)!=-1)){
            history.back();
            document.title = &#39;选择车型&#39;;
    }else {
        location.hash = tag;
    }
}

④js-Eintragsdatei (zepto.js wird hier verwendet) Wählen Sie dom aus )

window.onload=function(){
        info.selectBrand();  //为默认显示的模块中的元素绑定相应的事件及其他逻辑
        $(window).on("hashchange", function (e) {
            doHashChange();
       });
}

⑤Die wichtigste Steuerung der Hash-Änderungslogik

function doHashChange(){
    //获取hash的值
    var hash = location.hash.split(&#39;|&#39;)[0],
        tag = hash.replace(/#/g, &#39;&#39;);
    if (info.pages.indexOf(tag) == -1) {
        tag = &#39;Brand&#39;;
    }
    $(&#39;.wrap&#39;).children(&#39;div&#39;).hide();   
    //执行每个模块不同的方法
    if(typeof(info[&#39;select&#39; + tag]) == "function"){
        info[&#39;select&#39; + tag]();
    }
    //展示对应dom
    $(&#39;#&#39; + tag).show();
}


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:JavaScript verwendet KapselungNächster Artikel:JavaScript verwendet Kapselung