第二十四节:动态加载JS和动态加载CSS

2023-11-20

1、动态加载JS

一般需要用到js,需要将js放到<script></<script>中,一般script放到页面底部;或者在顶部引入外部js。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/jscript" src="js/flexible.js"></script>
	</head>
	<body>
	</body>
	<script>
	...
	</script>
</html>

使用JS的两种方式:

<script type="text/jscript" src="js/flexible.js"></script>
<script></script>

动态加载JS
①创建一个script标签
②将JS代码插入(远程js和文本形式插入两种),远程js会有一个时间差,称之为异步加载;需要callback回调函数,在js加载完成后执行回调方法;文本形式为同步加载,不需要回调方法。

什么是同步加载?什么是异步加载?
script的属性,h5新增async异步加载

//设置src,引入外部远程js,此时
function loadJS(url, callback) {
	var script = document.createElement('script');
	fn = callback || function() {};
	script.type = 'text/javascript';
	//IE 判断js是否执行完成
	if (script.readyState) {
		script.onreadystatechange = function() {
			if (script.readyState == 'loaded' || script.readyState == 'complete') {
				script.onreadystatechange = null;
				fn();
			}
		};
	} else {
		//其他浏览器,判断js是否执行完成
		script.onload = function() {
			fn();
		};
	}
	script.src = url;
	document.getElementsByTagName('head')[0].appendChild(script);
}
loadJS('js/flexible.js',function(){
    alert(1);
});
//在script内部插入js代码,内联<script>
var scriptM = document.createElement('script');
var jsHtml='var x=1;console.log(x);';
//scriptM.insertAdjacentText('afterbegin',jsHtml);
scriptM.innerHTML = jsHtml;
document.body.appendChild(scriptM);

注意:内联插入文本的写法IE会报错

Element.insertAdjacentText方法
Element.insertAdjacentText方法在相对于当前节点的指定位置,插入一个文本节点;第一个是一个表示指定位置的字符串,第二个是待解析的 HTML 字符串。

第一个参数的四个值:

  • beforebegin:当前元素之前
  • afterbegin:当前元素内部的第一个子节点前面
  • beforeend:当前元素内部的最后一个子节点后面
  • afterend:当前元素之后
//<p>Hello World</p>
var p1 = document.getElementsByTagName('p')[0];
p1.insertAdjacentText('beforebegin','标签前面');
p1.insertAdjacentText('afterbegin','标签内部前面');
p1.insertAdjacentText('beforeend','标签内部后面');
p1.insertAdjacentText('afterend','标签后面');
//结果:
//标签前面
//标签内部前面Hello World标签内部后面
//标签后面

加载与阻塞

如果使用src的方式加载js,设置src属性时,浏览器是不会发生请求的,只有当把script标签插入到文档当中(appendChild),插入完成之后浏览器才会下载这个文件,下载完会立即执行;当以字符串的形式插入script标签时,插入后会立即执行。

JS本身是一个阻塞形语言,对HTML而言,在JS下载和执行的时候是阻塞的。这就是为什么要把script标签放到文档底部的原因。如果放到文档顶部,浏览器一行一行解析HTML结构时,解析到script标签时就会停止,下载成功之后再执行,下载时其他都无法加载,只能等待JS的下载,所以称之为阻塞形语言。

动态加载JS时不会阻塞页面,但是执行时还是阻塞的。(这是由于浏览器的渲染造成的)

2、动态加载CSS

使用CSS的两种方式:

<link rel="stylesheet" type="text/css" href="css/newyear2.css">
<style>
...
</style>

注意:两种方式的标签是不同的,一个是link,一个是style;与动态加载JS略有不同

//外联样式
function loadCss(url){
	var link = document.createElement('link');
	link.type='text/css';
	link.rel='stylesheet';
	link.href=url;
	document.head.appendChild(link);
}
loadCss('css/newyear.css');
//页面样式
var style = document.createElement('style');
var bCss='.a{font-size:18px;color:#f00;}';
style.innerText=bCss;
document.head.appendChild(style);

动态加载JS与CSS的区别和注意点:
①动态加载JS创建的script标签可以插入到页面中的任何位置;CSS创建的link标签和style标签最好插入到head标签中(以免不同浏览器的解析不同造成不一样的结果)。
②动态加载JS创建的标签均为script标签;动态CSS外联用link标签,内联用style标签。
③JS加载完成之后,运行完成后,相关事件已执行完成,此时删除插入的script标签对整个网页没有任何影响(浏览器的js解释器是靠js解释器来完成的);(CSS的解析靠浏览器的渲染器进行完成)渲染器是一个实时更新的机制,所以删除或者修改会直接影响页面样式。
④动态加载CSS可以直接修改href来实现页面样式的修改,例如一些网站的主题修改,通过切换CSS样式即可实现;但是script修改src是无效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第二十四节:动态加载JS和动态加载CSS 的相关文章

随机推荐

  • shell脚本之循环语句

    for循环 语法1 for i in 集合 do 程序 done 语法2 for i 0 i lt 100 i do 程序 done eg 批量压缩文件 bin bash 批量压缩文件 cd root ls tar gz gt ls log
  • Flutter屏幕适配之二:Image资源assets的使用,实现不同分辨率图片的适配

    这两天在研究Flutter的屏幕适配方案 关于尺寸大小已经有点眉目了 初步定了利用等比例缩放 感兴趣的朋友可移步Flutter屏幕大小适配 但是还是不清楚怎么进行图片分辨率适配的 在百度了之后 仍然有点云里雾里 罢了 直接上官网看吧 果然
  • 【机器学习】入门:为什么梯度下降算法这么有效?

    译者 张雨佳 人们很难真正通过数学理解东西 你只需要去习惯并使用它 约翰 冯 诺伊曼 在机器学习中 我们已经习惯了使用梯度下降法解决问题 以至于没人去质疑它为什么有效 大家经常将梯度下降法模拟为爬山 要想找到崎岖地形中的顶峰 或低谷 就必须
  • Unity之获取游戏物体对象或组件的几个方法

    文章目录 前言 通过物体名称获取对象 GameObject Find Transform Find 通过物体标签获取对象 GameObject FindWithTag GameObject FindGameObjectWithTag Gam
  • 使用SVD求最小二乘刚性转置

    参见文章 Least Squares Rigid Motion Using SVD 一 问题描述 假设P p1 p2 pn 和Q q1 q2 qn 是两组Rd空间中的对应点集 现在想要根据这个两个点集的数据来计算出它们之间的刚性转置信息 可
  • LINUX下安装软件命令详解

    一 解析Linux应用软件安装包 通常Linux应用软件的安装包有三种 1 tar包 如software 1 2 3 1 tar gz 它是使用UNIX系统的打包工具tar打包的 2 rpm包 如software 1 2 3 1 i386
  • QT遍历文件夹下的所有文件

    文章目录 方法一 代码 方法二 需要注意的地方 代码 技巧 代码 方法一 使用类QDirIterator来进行遍历 简介 大概是说 适合于大目录遍历 支持递归但是不支持排序 QDirIterator NoIteratorFlags默认值 没
  • SpringBoot整合ELK教程

    SpringBoot整合ELK教程 1 基础概念 ELK 即 Elasticsearch Logstash Kibana 组合起来可以搭建线上日志系统 本文主要讲解使用 ELK 来收集测试框架产生的日志 Elasticsearch 用于存储
  • Nim 游戏

    你和你的朋友 两个人一起玩 Nim 游戏 桌子上有一堆石头 你们轮流进行自己的回合 你作为先手 每一回合 轮到的人拿掉 1 3 块石头 拿掉最后一块石头的人就是获胜者 假设你们每一步都是最优解 请编写一个函数 来判断你是否可以在给定石头数量
  • Linux_centos7_文件与目录管理_目录操作(1)_(Bird_Bro)

    关键词 路径 相对 绝对 目录操作 特殊目录 目录处理 环境变量 文件与目录验视 ls https blog csdn net weixin 38872771 title directory operating command 切换至roo
  • 程序员教你如何用Python爬取付费小说

    小说相信大家都爱看吧一章接一章具有极大的吸引力 看了还想看 当然付费小说价格也不便宜 看到一半突然收费 猝不及防 在我们程序员这里 收费是不存在的 万物皆可爬 什么是网络爬虫 网络爬虫 又被称为网页蜘蛛 网络机器人 在FOAF社区中间 更经
  • 【Colab】【使用外部数据的7种方法】

    文章目录 方法1 通过Files explorer上传 方法2 使用Colab files上传 方法3 读取Github链接 方法4 克隆Github项目 方法5 使用wget axel下载文件 方法6 读取谷歌硬盘数据 方法7 Kaggl
  • 天干年月算法java

    上班空闲时间 看见朋友圈发了张毛笔画 上面写了丙申 好奇查了查 下面说说java实现 很简单 简单到爆 哈啊哈 String tianGanTZ 庚 辛 壬 癸 甲 乙 丙 丁 戊 己 申 酉 戌 亥 子 丑 寅 卯 辰 巳 午 未 int
  • Java+SSM+Vue 毕业设计 电影院在线售票管理系统系统(含源码+论文)

    文章目录 1 项目简介 2 实现效果 2 1 界面展示 3 设计方案 3 1 概述 3 2 开发环境 3 3 系统流程 3 3 1 系统开发流程 3 3 2 用户登录流程 3 3 3 系统操作流程 3 4 系统结构设计 4 项目获取 1 项
  • JVM中的对象和引用详解

    1 对象的创建过程 其中的步骤是 当虚拟机碰到一条new指令时 先检查对象是否被加载 如果未被加载 就先将class加载到运行时数据区 然后虚拟机为对象分配内存 分配内存有两种方式 内存空间如果不是碎片化的 内存中已经使用的和未使用的内存空
  • 2023·基于Node.js的快递查询项目

    随着电商的发展 如今网上购物的人越来越多 频率越来越高 不用出门就能买到自己想要的东西 商品下了单之后商品怎么到自己的手上呢 这就离不开快递和物流了 商家把商品给到快递和物流服务商 快递和物流服务商则把商品运输并配送到我们的手上 除了电商行
  • Sublime Text 3 插件安装及Vim 模式设置

    Sublime Text 3 1 安装Sublime Text 3 下载安装 http www sublimetext com 3 Package Control安装 https sublime wbond net installation
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Java数组细节

    注意细节 1 数组的元素可以是任意类型 包括基本类型和引用类型 但是不能混用 2 数组中的元素满足自动转型原则 比如double类型的数组中可以存储int整数 这是因为整数已经自动转成double 但是int类型的数组中不能存放string
  • 第二十四节:动态加载JS和动态加载CSS

    1 动态加载JS 一般需要用到js 需要将js放到