博客列表 >用两种方法实现前端路由

用两种方法实现前端路由

后网络时代
后网络时代原创
2021年01月21日 18:10:56723浏览

1. 使用哈希(锚点)原生实现一个前端路由;

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>锚文本</title>
  7. </head>
  8. <body>
  9. <nav>
  10. <a href="#list1" >娱乐新闻</a> <a href="#list2">国际新闻</a>
  11. </nav>
  12. <div class="renew-viewer"></div>
  13. <a href="" style="position:absolute;bottom:0em;">回到顶部</a>
  14. <script>
  15. // 1.锚点:可以通过改变URL地址,实现在当前页面内部不同区域实现跳转
  16. // 2.由于在当前页面内部跳转,故不会刷新
  17. // 3.因此使用锚点可以完成SPA的两大目标:既想改变URL,又不刷新页面
  18. const list1=`
  19. <ul>
  20. <li>资本主义国家疑似新冠病毒的源头</li>
  21. <li>资本主义国家疑似新冠病毒的源头</li>
  22. <li>资本主义国家疑似新冠病毒的源头</li>
  23. <li>资本主义国家疑似新冠病毒的源头</li>
  24. <li>资本主义国家疑似新冠病毒的源头</li>
  25. </ul>
  26. `;
  27. const list2=`
  28. <ul id="list2">
  29. <li>娱乐圈的追星不再大行其道,已回归到该有的位置</li>
  30. <li>谢霆锋张柏芝疑似复合</li>
  31. <li>王菲疑似另结新欢</li>
  32. <li>王宝强传新婚</li>
  33. <li>马蓉喊话吴京出演战狼三</li>
  34. </ul>
  35. `;
  36. const renew=document.querySelector('.renew-viewer');
  37. console.log(window.location.hash);
  38. window.addEventListener('hashchange',show);
  39. //window.addEventListener('load',show);
  40. //DOMContentLoaded在DOM树和css树(有些浏览器不等css树执行完成)创建完成就会触发,load在图片和js加载完成时候触发
  41. //DOMContentLoaded先执行
  42. window.addEventListener('DOMContentLoaded',show);
  43. function show(){
  44. with(console){
  45. log(window.location.hash);
  46. }
  47. switch(window.location.hash){
  48. case '#list1':
  49. renew.innerHTML=list1;
  50. break;
  51. case '#list2':
  52. renew.innerHTML=list2;
  53. break;
  54. default:
  55. renew.innerHTML=list1;
  56. }
  57. }
  58. </script>
  59. </body>
  60. </html>

效果:

2. 使用vue路由模块实现一个前端路由

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>VUE框架原理</title>
  7. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  8. <script src="vue-router-dev/dist/vue-router.js"></script>
  9. </head>
  10. <body>
  11. <nav id="app">
  12. <!-- 1.vue的路由是基于hash实现的,使用a标签的锚点来实现 -->
  13. <router-link to="/list1" >国际新闻</router-link>
  14. <router-link to="/list2" >娱乐新闻</router-link></router-link>
  15. <!-- 路由到的资源显示区: -->
  16. <router-view></router-view>
  17. </nav>
  18. <script>
  19. //创建路由对象
  20. const router = new VueRouter({
  21. //路由配置项目
  22. routes:[
  23. //每一个路由都是一个对象,每个对象对应一个路由
  24. {
  25. path:'/list1',
  26. component:{
  27. template:`
  28. <ul>
  29. <li>资本主义国家疑似新冠病毒的源头</li>
  30. <li>资本主义国家疑似新冠病毒的源头</li>
  31. <li>资本主义国家疑似新冠病毒的源头</li>
  32. <li>资本主义国家疑似新冠病毒的源头</li>
  33. <li>资本主义国家疑似新冠病毒的源头</li>
  34. </ul>
  35. `,
  36. }
  37. },
  38. //每一个路由都是一个对象,每个对象对应一个路由
  39. {
  40. path:'/list2',
  41. component:{
  42. template:`
  43. <ul id="list2">
  44. <li>娱乐圈的追星不再大行其道,已回归到该有的位置</li>
  45. <li>谢霆锋张柏芝疑似复合</li>
  46. <li>王菲疑似另结新欢</li>
  47. <li>王宝强传新婚</li>
  48. <li>马蓉喊话吴京出演战狼三</li>
  49. </ul>
  50. `,
  51. }
  52. },
  53. ],
  54. });
  55. new Vue({
  56. //注册路由
  57. router:router,
  58. }).$mount('#app');
  59. </script>
  60. </body>
  61. </html>

效果:

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议