iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >基于原生JavaScript怎么实现SPA单页应用
  • 781
分享到

基于原生JavaScript怎么实现SPA单页应用

2023-07-05 15:07:11 781人浏览 薄情痞子
摘要

这篇文章主要介绍“基于原生javascript怎么实现SPA单页应用”,在日常操作中,相信很多人在基于原生JavaScript怎么实现SPA单页应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于原生Jav

这篇文章主要介绍“基于原生javascript怎么实现SPA单页应用”,在日常操作中,相信很多人在基于原生JavaScript怎么实现SPA单页应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于原生JavaScript怎么实现SPA单页应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

什么叫做SPA单页应用

单页WEB应用 (single page web application,SPA) ,就是只有一张Web页面的应用,是加载单个html 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。

单页应用的说法是在JavaScript和ajax技术比较成熟以后才出现的,指的是通过浏览器访问一个网站时,只需要加载一个入口页面,此后显示的内容和数据都不会再刷新浏览器页面。有了单页应用之后,传统的网站就被称为多页应用了。

单页应用的优点

前端负责界面显示,后端负责数据存储和计算,各司其职。

用户体验好、快,内容的改变不需要重新加载,提升了用户体验;而且同一套后端程序代码,不用修改就可以用于Web界面、手机、平板等多种客户端;

减轻服务器压力,服务器只用出数据就可以,不用管展示逻辑和页面合成,吞吐能力会提高几倍。

单页应用的实现原理

其实很容易理解,就是在一个HTML页面当中只有一个div节点,通过后端获取到数据,然后js操作DOM来创建、删除、更新节点以达到修改页面内容,所以页面是没有被刷新的,只是DOM节点发生了改变,所以HTML发生了改变。

目前有非常多开发单页应用的优秀框架,常见的有VueReact、Svelte、angular,但是这些框架都需要依赖非常笨重的node模块、打包工具、开发环境、以及各种组件。

上代码

index.html

<html><head>    <title>原生JS实现的单页应用</title>    <meta Http-equiv="Content-Type" content="text/html; charset=utf-8">    <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-Scalable=0,viewport-fit=cover">    <script src="./static/js/index.js"></script>    <link rel="stylesheet" href="./static/CSS/index.css" rel="external nofollow" ></head><body>        <div id="app"></div></body></html>

static/css/index.css

*{    padding: 0;    margin: 0;}body{    background: #eee;}#app .topBar{    width: 100%;    height: 50px;    background: #fff;    margin-bottom: 20px;    line-height: 50px;}#app .topBar a{    display: block;    float: left;    padding:0 10px;    text-decoration: none;    color: #333;}#app .contentView a{    display: block;    text-decoration: none;    line-height: 40px;    background: #fff;    width: 90%;    margin: 0 auto 10px;    padding: 5px 10px;    color: #333;    font-size: 15px;    border-radius: 10px;}

static/js/index.js

// 路由配置const routes = {    '/': home,    '/weibo': weibo,    '/douyin': douyin};// 路由函数function router() {        // 获取当前 URL 中的路径部分    const path = window.location.hash.slice(1);        // 根据路径找到对应的处理函数    const handler = routes[path] || notFound;        // 渲染页面    handler();}// 注入topBar选项function addTopBarItem(){        $topBarItem_HTML = `    <a href="#/" rel="external nofollow" >百度热搜</a>    <a href="#/weibo" rel="external nofollow" >微博热搜</a>    <a href="#/douyin" rel="external nofollow" >抖音热搜</a>    `;    document.querySelector('#app .topBar').innerHTML = $topBarItem_HTML;}// 首页function home() {        // 热搜列表    var hotlist = [        {            'title':'中俄联合声明:用和谈解决乌克兰危机',            'url':'https://baijiahao.baidu.com/s?id=1760993625204951286'        },        {            'title':'网友晒壮观的俄罗斯护送队',            'url':'https://quanmin.baidu.com/v/4235918912360611140'        },        {            'title':'春季旅游消费强势复苏',            'url':'https://quanmin.baidu.com/v/4235918912360611140'        },        {            'title':'你的城市在下雨,他的城市在下泥',            'url':'https://haokan.baidu.com/v?pd=wisenatural&vid=3490913664840969394'        },        {            'title':'英国宣布向乌提供贫铀弹',            'url':'https://news.ycwb.com/2023-03/22/content_51834441.htm'        }    ];    $home_HTML = `    <div class="topBar"></div>    <div class="contentView"></div>    `;        document.querySelector('#app').innerHTML = $home_HTML;    addTopBarItem();        for (var i = 0; i < hotlist.length; i++) {                var node_li = document.createElement("a");        node_li.setAttribute('href',hotlist[i].url);        var hotlist_node = document.createTextNode(hotlist[i].title);        node_li.appendChild(hotlist_node);        document.querySelector('#app .contentView').appendChild(node_li);    }}// 微博热搜function weibo() {        // 热搜列表    var hotlist = [        {            'title':'中俄元首签署联合声明',            'url':'https://s.weibo.com/weibo?q=%23%E4%B8%AD%E4%BF%84%E5%85%83%E9%A6%96%E7%AD%BE%E7%BD%B2%E8%81%94%E5%90%88%E5%A3%B0%E6%98%8E%23&t=31&band_rank=1&Refer=top'        },        {            'title':'迪丽热巴微博之夜正式官宣',            'url':'https://s.weibo.com/weibo?q=%23%E8%BF%AA%E4%B8%BD%E7%83%AD%E5%B7%B4%E5%BE%AE%E5%8D%9A%E4%B9%8B%E5%A4%9C%E6%AD%A3%E5%BC%8F%E5%AE%98%E5%AE%A3%23&t=31&band_rank=2&Refer=top'        },        {            'title':'中俄关系对世界格局人类前途命运至关重要',            'url':'https://s.weibo.com/weibo?q=%23%E4%B8%AD%E4%BF%84%E5%85%B3%E7%B3%BB%E5%AF%B9%E4%B8%96%E7%95%8C%E6%A0%BC%E5%B1%80%E4%BA%BA%E7%B1%BB%E5%89%8D%E9%80%94%E5%91%BD%E8%BF%90%E8%87%B3%E5%85%B3%E9%87%8D%E8%A6%81%23&t=31&band_rank=3&Refer=top'        },        {            'title':'朴妍珍和宋承宪演过人间中毒',            'url':'https://s.weibo.com/weibo?q=%23%E6%9C%B4%E5%A6%8D%E7%8F%8D%E5%92%8C%E5%AE%8B%E6%89%BF%E5%AE%AA%E6%BC%94%E8%BF%87%E4%BA%BA%E9%97%B4%E4%B8%AD%E6%AF%92%23&t=31&band_rank=4&Refer=top'        },        {            'title':'云之羽官宣演员阵容',            'url':'https://s.weibo.com/weibo?q=%23%E4%BA%91%E4%B9%8B%E7%BE%BD%E5%AE%98%E5%AE%A3%E6%BC%94%E5%91%98%E9%98%B5%E5%AE%B9%23&t=31&band_rank=5&Refer=top'        }    ];    $weibo_HTML = `    <div class="topBar"></div>    <div class="contentView"></div>    `;        document.querySelector('#app').innerHTML = $weibo_HTML;    addTopBarItem();        for (var i = 0; i < hotlist.length; i++) {                var node_li = document.createElement("a");        node_li.setAttribute('href',hotlist[i].url);        var hotlist_node = document.createTextNode(hotlist[i].title);        node_li.appendChild(hotlist_node);        document.querySelector('#app .contentView').appendChild(node_li);    }}// 抖音热搜function douyin() {        // 热搜列表    var hotlist = [                {            'title':'高双星偷走的是高加林的人生',            'url':'https://www.douyin.com/hot/1104967'        },        {            'title':'中国空间站的窗外有多美',            'url':'https://www.douyin.com/hot/1104853'        },        {            'title':'人民文娱评黑暗荣耀毒虫仿妆',            'url':'https://www.douyin.com/hot/1103955'        },            ];    $douyin_HTML = `    <div class="topBar"></div>    <div class="contentView"></div>    `;        document.querySelector('#app').innerHTML = $douyin_HTML;    addTopBarItem();        for (var i = 0; i < hotlist.length; i++) {                var node_li = document.createElement("a");        node_li.setAttribute('href',hotlist[i].url);        var hotlist_node = document.createTextNode(hotlist[i].title);        node_li.appendChild(hotlist_node);        document.querySelector('#app .contentView').appendChild(node_li);    }}// 404 页面处理函数function notFound() {    const main = document.querySelector('#app');    main.innerHTML = '<h2>404 页面不存在</h2>';}// 监听 URL 变化事件window.addEventListener('hashchange', router);// 页面加载完成后初始化路由window.addEventListener('load', router);

代码说明

本次示例也是采用了目前的Web构建工具打包出来的目录模式(即webpack、Vite等打包工具)

基于原生JavaScript怎么实现SPA单页应用

index.js里面的数据写在了一个对象当中,实际应用需要使用AJAX/Fetch等方式获取数据返回JSON对象进行显示。

动图演示

在这个动图示例中,可以看到,切换tab的时候,下面的列表发生了变化,URL也发生了变化,但是并没有刷新页面。

基于原生JavaScript怎么实现SPA单页应用

到此,关于“基于原生JavaScript怎么实现SPA单页应用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 基于原生JavaScript怎么实现SPA单页应用

本文链接: https://www.lsjlt.com/news/352795.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于原生JavaScript实现SPA单页应用
    目录什么叫做SPA单页应用单页应用的优点单页应用的实现原理上代码代码说明动图演示DEMO什么叫做SPA单页应用 单页Web应用 (single page web appli...
    99+
    2023-03-23
    JavaScript SPA单页应用 JavaScript SPA单页 JavaScript SPA
  • 基于原生JavaScript怎么实现SPA单页应用
    这篇文章主要介绍“基于原生JavaScript怎么实现SPA单页应用”,在日常操作中,相信很多人在基于原生JavaScript怎么实现SPA单页应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于原生Jav...
    99+
    2023-07-05
  • JavaScript中怎么实现SPA单页面
    这篇“JavaScript中怎么实现SPA单页面”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript中怎么实现...
    99+
    2023-07-05
  • angular如何实现spa单页面应用
    这篇文章主要介绍了angular如何实现spa单页面应用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。简单理解:单页面应用,锚点值切换,一个...
    99+
    2024-04-02
  • 基于原生JS怎么实现分页效果
    这篇文章主要介绍“基于原生JS怎么实现分页效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于原生JS怎么实现分页效果”文章能帮助大家解决问题。实现之后的效果首先需要初始化该对象的一些基本属性,显...
    99+
    2023-06-30
  • vue中怎么利用SPA实现一个单页面应用
    vue中怎么利用SPA实现一个单页面应用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、SPA的概述SPA(single page appl...
    99+
    2024-04-02
  • 基于PHP怎么实现原生增删改查
    这篇文章主要讲解了“基于PHP怎么实现原生增删改查”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于PHP怎么实现原生增删改查”吧!一、代码1、sql-- phpMyAdmin&n...
    99+
    2023-06-30
  • 基于原生JS实现分页效果的示例代码
    这个只是一个分页的demo,主要是思路整理(很久之前项目用的东西) 分页实现的效果 主要是 左侧上一页 右侧是下一页 中间显示主要是超过5个显示 省略号 然后是可配置选项 实现之后的...
    99+
    2024-04-02
  • 基于原生JS验证表单组件xy-form怎么用
    小编给大家分享一下基于原生JS验证表单组件xy-form怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!原生form表单fo...
    99+
    2024-04-02
  • vue怎么实现单页面应用
    本篇内容介绍了“vue怎么实现单页面应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一:npm的安装由于新版的node.js已经集成了np...
    99+
    2023-07-04
  • javascript怎么实现页面生成器
    这篇文章主要介绍“javascript怎么实现页面生成器”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript怎么实现页面生成器”文章能帮助大家解决问题。目标我们的目标是实现一个页面制作...
    99+
    2023-06-27
  • VUE 路由与 SPA 单页面应用的完美匹配,实现无缝的页面切换
    VUE 路由是一个强大的工具,可用于在 SPA 单页面应用中实现无缝的页面切换。它允许您管理页面状态,并根据用户操作动态地加载和渲染页面。这可以大大提高用户体验,并使您的应用程序更加灵活和易于使用。 VUE 路由的工作原理 VUE 路由...
    99+
    2024-02-05
    VUE 路由 SPA 单页面应用 页面切换 用户体验 应用程序开发
  • 原生JavaScript怎么实现模态框
    本篇内容介绍了“原生JavaScript怎么实现模态框”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原生js封装模态框最近需要一个模态框,然...
    99+
    2023-07-02
  • 基于原生CSS+JS怎么实现一个标签输入框
    这篇“基于原生CSS+JS怎么实现一个标签输入框”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于原生CSS+JS怎么实现一...
    99+
    2023-06-29
  • 如何实现基于react+webpack的多页面应用
    这篇文章给大家分享的是有关如何实现基于react+webpack的多页面应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。项目目录介绍:打包后文件目录:打包成cli如果你厌烦了新...
    99+
    2024-04-02
  • 怎么用原生 JavaScript 实现十大 jQuery 函数
    本篇内容主要讲解“怎么用原生 JavaScript 实现十大 jQuery 函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用原生 JavaScript ...
    99+
    2024-04-02
  • 简单实用的原生PHP分页类是怎样的
    本篇文章为大家展示了简单实用的原生PHP分页类是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一款简单实用的原生PHP分页类,分页按钮样式简洁美观,页码多的时候显示“...”,也是挺多网站用的...
    99+
    2023-06-04
  • 怎么用css实现基于用户滚动应用
    这篇文章主要介绍怎么用css实现基于用户滚动应用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!   通过将当前滚动偏移映射到html元素上的属性,我们可以根据当前滚动位置设置页面上...
    99+
    2024-04-02
  • 原生JavaScript怎么实现九宫格抽奖
    本文小编为大家详细介绍“原生JavaScript怎么实现九宫格抽奖”,内容详细,步骤清晰,细节处理妥当,希望这篇“原生JavaScript怎么实现九宫格抽奖”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。思路:通过...
    99+
    2023-07-02
  • javascript怎么实现简单页面倒计时
    小编给大家分享一下javascript怎么实现简单页面倒计时,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体如下:<!DOCTYPE html><html><head>&nb...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作