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

Verwenden Sie natives JS, um eine Einzelseitenanwendung zu erstellen

高洛峰
Freigeben: 2016-11-30 17:04:40
Original
1154 Leute haben es durchsucht

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>
Nach dem Login kopieren

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();
}
Nach dem Login kopieren

②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(){...}
Nach dem Login kopieren

③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;
    }
}
Nach dem Login kopieren

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

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

⑤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();
}
Nach dem Login kopieren


Verwandte Etiketten:
js
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage