JavaScript学习10:动态载入脚本和样式

JavaScript学习10:动态载入脚本和样式

大家好,又见面了,我是全栈君。

       我们在写Web页面的时候,须要引入非常多的JavaScript脚本文件和CSS样式文件,尤其是在站点需求量非常大的时候,脚本的需求量也随之变大,这样一来,站点的性能就会大打折扣。因此就出现了动态载入的概念。即在须要的时候才去载入相应的脚本和样式。以下我们就来看看怎样实现动态载入。

      动态脚本
       先来看一个动态载入js文件的代码演示样例:

//动态载入JS
var flag=false ;
if(flag){
	loadScript('browserdetect.js');
}
function loadScript(url){
	var script =document.createElement('script');
	script.type='text/javascript';
	script.src=url;
	document.getElementsByTagName('head')[0].appendChild(script);
}

       如此一来,我们仅仅需控制flag的值就能够控制js脚本文件是否载入到当前页面中。

       再来看一个动态运行js的演示样例:

//动态运行JS
var flag=true ;
if(flag){
	executeScript();
}
function executeScript(){
	var script =document.createElement('script');
	script.type='text/javascript';
	var text=document.createTextNode("alert('Lian')");
	script.appendChild(text);
	document.getElementsByTagName('head')[0].appendChild(script);
}

      动态样式
       我们肯定都对各种换肤功能司空见惯了,可是你肯定没想过换肤是怎样实现的。我也是学到这块才恍然大悟。原来看起来蛮高级的换肤功能居然如此简单:仅仅需换一个CSS样式就可以。
那我们就来看看网页的样式是怎样动态载入的。

通常样式表有两种方式进行载入,一种是<link>标签,一种是<style>标签。

因此给出两种方式的代码演示样例,来说明怎样动态载入样式。

       使用link标签载入,和上面提到的动态载入js脚本没什么两样,不再多说。
<span style="font-size:18px;">//动态运行linkvar flag=true;if(flag){	loadStyle('basic.css');}function loadStyle(url){	var link=document.createElement('link');	link.rel='stylesheet';	link.type ='text/css';	link.href=url;	document.getElementsByTagName('head')[0].appendChild(link);}</span>

       比較麻烦点的是使用style来改变样式,由于涉及兼容性问题,所以在运行的时候,须要依据浏览器支持的类型,选择对应的函数来运行这个过程,看下代码演示样例
<span style="font-size:18px;">//动态运行style
var flag=true;
if(flag){
	var style=document.createElement('style');
	style.type='text/css';
	document.getElementsByTagName('head')[0].appendChild(style);
	insertRule(document.styleSheets[0],'#box','background:red',0);
}
function insertRule(sheet,selectorText,cssText,position){
	//假设是非IE
	if(sheet.insertRule){
		sheet.insertRule(selectorText+"{"+cssText+"}",position);	
	}else if(sheet.addRule){ //假设是IE
		sheet.addRule(selectorText,cssText,position);
	}
}</span>

       小结一下记得老师以前重复强调,如无必要。勿增实体。相同在程序设计的过程中也一样,我们在程序启动时。就载入非常多的东西,势必会影响程序的性能。因此我们要学会在须要的时候,一点一点的进行加入。有点装饰模式的赶脚。同一时候也是一个灵活性的体现。尽管是一个小的知识点,可是运用好了,是有大用处的。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115369.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Objective-C之父Brad J. Cox去世,他推动了今天苹果的软件生态[通俗易懂]

    Objective-C之父Brad J. Cox去世,他推动了今天苹果的软件生态[通俗易懂]本文转载自机器之心近日,讣告网站Legacy.com发布消息:Objective-C之父BradJ.Cox博士于2021年1月2日在自己的家中逝世,享年77岁。如果你是苹果生态的一位开发者,那你对Objective-C一定不会陌生。这门语言成就了苹果强大的软件生态,也因为苹果硬件的畅销而一路高歌猛进,挺进各大编程语言排行榜的前几名。作为一位计算机科学家,BradCox的主要成就是和TomLove一起创建了Objective–C。此外,他还以在软件工

  • css页面自适应屏幕大小_html图片自适应屏幕

    css页面自适应屏幕大小_html图片自适应屏幕两种方法(1)原生自适应@mediascreen表示当屏幕大于320px,并小于1156px是执行下面的css@mediascreenand(min-width:320px)and(max-width:1156px){ .site-bg-dl{ position:fixed; height:100%; widt

  • Linux iptables

    Linux iptables

  • Vue中,methods中调用filters里的过滤器

    Vue中,methods中调用filters里的过滤器需求:vue中,除了在模板中使用过滤器,有时候,methods中也需要使用filters中的过滤器! this.$options.filters[filter](…args)//这种方法很简单,也很实用打印 this.$options.filters报错,打印this.$options.filters.myFilter正常,显示为一个function原文地址:https:/…

  • bridge桥接模式_Bridge模式

    bridge桥接模式_Bridge模式bridge模式动机案例要点总结笔记动机由于某些类型的固有的实现逻辑,使得他们具有两个变化维度,乃至多个维度的变换如何应对这种”多维度的变化“?如何利用面向对象技术来是使得类型可以轻松地沿着两个乃至多个方向变换而不引入额外地复杂度?案例PC端和Mobile端平台和业务分离朴素class Messager{ public: virtual void Login(string username,string password) = 0; virtual void SendM

  • python读取excel中的数据[通俗易懂]

    python读取excel中的数据[通俗易懂]importxlrdimportxlwtdefread_excel():#打开文件workBook=xlrd.open_workbook(‘data/HanXueLi_201801.xlsx’);#1.获取sheet的名字#1.1获取所有sheet的名字(list类型)allSheetNames=workBook.sh…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号