博主信息
博文 45
粉丝 3
评论 0
访问量 58008
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Vue路由原理与实现
残破的蛋蛋
原创
1270人浏览过

Vue路由原理与实现

一、基于哈希的路由原理与实现

1.1 基于锚点的hash路由

Location 接口表示其链接到的对象的位置(URL)。

属性:

Location.href

  • 包含整个URL的一个DOMString

Location.protocol

  • 包含URL对应协议的一个DOMString,最后有一个”:”。

Location.host

  • 包含了域名的一个DOMString,可能在该串最后带有一个”:”并跟上URL的端口号。

Location.hostname

  • 包含URL域名的一个DOMString。
    Location.port

包含端口号的一个DOMString。

Location.pathname

  • 包含URL中路径部分的一个DOMString,开头有一个“/“。
    Location.search

  • 包含URL参数的一个DOMString,开头有一个“?”。
    Location.hash

  • 包含块标识符的DOMString,开头有一个“#”。

Location.username

  • 包含URL中域名前的用户名的一个DOMString。

Location.password

  • 包含URL域名前的密码的一个 DOMString。

Location.origin 只读

  • 包含页面来源的域名的标准形式DOMString。

下面是一个基于锚点的哈希路由模式案例:

  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. <div class="wrap">
  10. <nav>
  11. <a href="#list1">国际新闻</a>
  12. <a href="#list2">娱乐新闻</a>
  13. </nav>
  14. <!-- 该区域专用于显示路由的内容 -->
  15. <div class="route-view"></div>
  16. <script>
  17. let list1 = `
  18. <ul id="list1">
  19. <li><a href="">美国:是“我有一个梦想”还是“我已不能呼吸”</a></li>
  20. <li><a href="">美国:是“我有一个梦想”还是“我已不能呼吸”</a></li>
  21. <li><a href="">美国:是“我有一个梦想”还是“我已不能呼吸”</a></li>
  22. </ul>
  23. `;
  24. let list2 = `
  25. <ul id="list2" style="transform: translate(0, 10rem);transition: all 0.5s;">
  26. <li><a href="">19日晚,郑爽再度发文回应代孕弃养,并爆料张恒曾出轨。</a></li>
  27. <li><a href="">19日晚,郑爽再度发文回应代孕弃养,并爆料张恒曾出轨。</a></li>
  28. <li><a href="">19日晚,郑爽再度发文回应代孕弃养,并爆料张恒曾出轨。</a></li>
  29. </ul>
  30. `;
  31. // //获取路由的内容显示区的元素
  32. const routeView = document.querySelector('.route-view');
  33. // // window.location 当前页面的URL
  34. // // 锚点使用 location.hash 包含块标识符的DOMString,开头有一个“#”。
  35. // console.log(location.hash);
  36. // hashchange:url中的锚点变化时会自动触发此事件
  37. window.addEventListener("hashchange", show);
  38. // DOMContentLoaded:当初始的HTML文档被完全加载和解析之后,DOMContentLoaded事件被触发,而无需等待
  39. // 样式表、图像和子框架的完全加载,
  40. // window.addEventListener("load", show)
  41. console.log(location.pathname);
  42. // load和DOMContentLoaded的区别,简而言之就是只要DOM树创建完成就会触发,而load要等js和图片资源加载完成才触发
  43. //页面加载完成之后自动加载默认锚点
  44. window.addEventListener("DOMContentLoaded", show);
  45. function show () {
  46. console.log(location.hash);
  47. switch (location.hash) {
  48. case "#list1":
  49. routeView.innerHTML = list1;
  50. break;
  51. case "#list2":
  52. routeView.innerHTML = list2;
  53. break;
  54. default:
  55. routeView.innerHTML = list1;
  56. }
  57. }
  58. </script>
  59. </div>
  60. </body>
  61. </html>
  • 效果图:

锚点哈希路由

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学