首页 > 其他分享 >第二十三章:动态加载脚本和样式

第二十三章:动态加载脚本和样式

时间:2023-04-26 16:37:20浏览次数:53  
标签:box 第二十三章 script 样式 text var document IE 加载


学习要点:
1.元素位置
2.动态脚本
3.动态样式

本章主要讲解上一章剩余的获取位置的 DOM 方法、动态加载脚本和样式。
一.元素位置
上一章已经通过几组属性可以获取元素所需的位置,那么这节课补充一个 DOM 的方法:getBoundingClientRect()。这个方法返回一个矩形对象,包含四个属性:left、top、right和 bottom。分别表示元素各边与页面上边和左边的距离。



var box = document.getElementById('box'); //获取元素
alert(box.getBoundingClientRect().top); //元素上边距离页面上边的距离
alert(box.getBoundingClientRect().right); //元素右边距离页面左边的距离
alert(box.getBoundingClientRect().bottom); //元素下边距离页面上边的距离
alert(box.getBoundingClientRect().left); //元素左边距离页面左边的距离



 
PS:IE、Firefox3+、Opera9.5、Chrome、Safari 支持,在 IE 中,默认坐标从(2,2)开始计算,导致最终距离比其他浏览器多出两个像素,我们需要做个兼容。



document.documentElement.clientTop; //非 IE 为 0,IE 为 2
document.documentElement.clientLeft; //非 IE 为 0,IE 为 2
function getRect(element) {
var rect = element.getBoundingClientRect();
var top = document.documentElement.clientTop;
var left = document.documentElement.clientLeft;
return {
top : rect.top - top,
bottom : rect.bottom - top,
left : rect.left - left,
right : rect.right - left
}
}



 
PS:分别加上外边据、内边距、边框和滚动条,用于测试所有浏览器是否一致。
二.动态脚本
当网站需求变大,脚本的需求也逐步变大。我们就不得不引入太多的 JS 脚本而降低了整站的性能,所以就出现了动态脚本的概念,在适时的时候加载相应的脚本。
比如:我们想在需要检测浏览器的时候,再引入检测文件。



var flag = true; //设置 true 再加载
if (flag) {
loadScript('browserdetect.js'); //设置加载的 js
}
function loadScript(url) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
//document.head.appendChild(script); //document.head 表示<head>
document.getElementsByTagName('head')[0].appendChild(script);
}



 
PS:document.head 调用,IE 不支持,会报错!
//动态执行 js



var script = document.createElement('script');
script.type = 'text/javascript';
var text = document.createTextNode("alert('Lee')"); //IE 浏览器报错
script.appendChild(text);
document.getElementsByTagName('head')[0].appendChild(script);



 

PS:IE 浏览器认为 script 是特殊元素,不能在访问子节点。为了兼容,可以使用 text属性来代替。
script.text = "alert('')"; //IE 可以支持了。
PS:当然,如果不支持 text,那么就可以针对不同的浏览器特性来使用不同的方法。 这里就忽略写法了。
三.动态样式
为了动态的加载样式表, 比如切换网站皮肤。 样式表有两种方式进行加载, 一种是<link>标签,一种是<style>标签。
//动态执行 link



var flag = true;
if (flag) {
loadStyles('basic.css');
}
function loadStyles(url) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = url;
document.getElementsByTagName('head')[0].appendChild(link);
}



 
//动态执行 style



var flag = true;
if (flag) {
var style = document.createElement('style');
style.type = 'text/css';
//var box= document.createTextNode(#box{background:red}'); IE 不支持
//style.appendChild(box);
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);
//如果是 IE
} else if (sheet.addRule) {
sheet.addRule(selectorText, cssText, position);
}
}


 

标签:box,第二十三章,script,样式,text,var,document,IE,加载
From: https://blog.51cto.com/u_16089934/6228126

相关文章

  • vue-router4 配置懒加载 页面加载时展示loading
     懒加载写法{path:"/",name:"index",component:()=>import("../views/Home.vue"),}创建Loading组件并引入到顶层组件中使用store控制loading组件是否展示包装懒加载写法constlazyLoad=(componentPath)=>{//注意:componentPath不......
  • TileServer GL图层样式的layout属性
    在TileServerGL的样式中,layout属性用于定义图层布局参数。以下是一些常见的layout属性及其说明:visibility:指定图层是否可见。line-cap:指定线条末端的外观样式(butt、round、square)。line-join:指定连接线段的类型(miter、bevel、round)。line-miter-limit:指定mitre连接的......
  • vue主应用,qiankun 子应用切换主应用样式错乱问题
    vue主应用,qiankun子应用切换主应用样式错乱问题 constchildRoute=['/flinkdashboard','/dolphinscheduler','/datainsight']//子应用路径constisChildRoute=(path)=>childRoute.some(item=>path.startsWith(item));constrawAppendChild=......
  • cesium-1-加载影像数据和影像数据基础知识
    1、影像数据的图层类有哪些viewer-->imageryLayers(ImageryLayerCollection类型)-->ImageryLayer类型-->ImageryProvider抽象类viewer下有ImageryLayerCollection类型的imageryLayers用来存放影像数据(可多个),只能是ImageryLayer类型变量(包含影像数据但除了影像数据之外还有......
  • CSS样式更改——文本Content
    上篇文章主要讲述了CSS样式更改中的背景Background,这篇文章我们来谈谈文本Content内容的基础用法1)).首行缩进文本<divstyle='text-indent:2em'></div>可以设置负数也可使用百分数像素2)).文本对齐方式<divstyle='text-align:center'></div>left左边right右边cen......
  • CSS样式更改篇——背景Background
    上篇文章主要讲述了CSS的基础用法,讲述了如何定义头文件,导入CSS文件,id和class选择器,元素选择器,后代选择器,子元素选择器,兄弟选择器,伪类选择器等等,让大家对CSS选择器有个简单的认识和了解。这篇接上篇文章,继续讲解CSS的基础用法。###背景Background背景可以设置很多,比如背景颜色,背景......
  • uniapp 动态修改 css 样式
    css使用var注入变量,达到设置动态样式的需求声明css变量时,变量名前面要加两根连词线(--);变量使用kebab-case命名方式,即--header-color而不是--headerColor;变量名大小写敏感,--header-color和--Header-Color是两个不同的变量名;var()函数用于读取变量。接下来,看......
  • go之logrus自定义日志样式
    日志功能配置:logrus.gopackagecoreimport("bytes""fmt""github.com/sirupsen/logrus""io""os""path")const(red=31yellow=33blue=36gray......
  • 不同语言加载不同字号,设置到资源文件中,进行引用
    在资源文件夹创建一个类在App.xaml文件中引用这个类的空间命名,并把这个类添加到资源在页面中应用在使用其他语言时,开启新的子线程依然会使用区域语言.net4.5后使用可以一次性解决varculture=newCultureInfo("en-US");    CultureInfo.DefaultThreadCurrent......
  • 类加载器
    类与类加载器任意一个类,都由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟......