`
chaoyi
  • 浏览: 309610 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

 
阅读更多

学习要点:
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);
}
}

 

分享到:
评论

相关推荐

    第23章 动态加载脚本和样式1

    在网页开发中,动态加载脚本和样式是提高性能和用户体验的重要策略。本章主要涵盖了三个关键知识点:元素位置的获取、动态脚本的加载以及动态样式的应用。 首先,让我们详细讨论一下元素位置的获取。在DOM(文档...

    Javascript教程

    20. **第二十章:CSS与JavaScript的结合** - 使用JavaScript操作样式 - 动画与过渡效果 21. **第二十一章:移动Web开发** - 移动端适配 - 响应式设计与媒体查询 22. **第二十二章:安全问题** - XSS与CSRF...

    matlab入门经典教程

    第十三章:动态系统与仿真 了解如何使用Matlab的Simulink进行动态系统建模和仿真,包括连续系统、离散系统和混合系统。 第十四章:App Designer Matlab的App Designer使得创建交互式应用程序变得直观和简单。我们将...

    Professional JavaScript Frameworks Prototype, YUI, Ext JS, Dojo and MooTools.pdf

    - **第23章及之后** 这部分将继续深入介绍Dojo框架的相关特性和实践应用。 #### 三、额外资源与社区支持 - **更新、源代码和技术支持** 读者可以访问www.wrox.com获取最新的更新信息、源代码和技术支持。 - *...

    AutoCAD 2014中文版完全自学视频教程下载第23章 外部参照及脚本文件.zip

    本教程重点聚焦于"外部参照"和"脚本文件"这两个核心概念,这两部分对于提高设计效率和自动化工作流程至关重要。 外部参照(XREF)是AutoCAD中的一个重要特性,它允许用户将一个图形文件作为参照插入到另一个图形...

    ureport2教学视频(全11章)

    2. **第二章:报表设计界面** - 报表设计器的启动与界面布局 - 数据源的设置与管理,包括数据库连接和JDBC数据源 - 表格、图表、图片等元素的添加与编辑 - 表达式和函数的使用,如计算、比较、日期处理等 3. **...

    JavaScript Programmer's Reference - Alexei White

    #### 第二十三章:脚本插件 许多浏览器扩展或插件都依赖于JavaScript编写。本章探讨了如何创建自定义脚本插件以增强浏览器功能。 #### 第二十四章:调试 调试是软件开发过程中不可或缺的一环。本章提供了一系列实用...

    Java语言基础下载

    第二十三章:HTML基础 419 学习目标 419 知识要点 420 HTML元素 420 标签属性 420 HTML基本标签 422 标题元素 422 HTML格式 427 HTML实体 431 不可拆分的空格 431 HTML表格 439 表格 441 HTML列表 461 HTML图像 469 ...

    轻松搞定Extjs_原创

    #### 第二十三章:可编辑的GridPanel——EditGridPanel - **EditGridPanel**:介绍用于编辑表格数据的特殊GridPanel。 - **编辑订单数据**:演示如何使用EditGridPanel编辑表格中的订单信息。 - **保存修改的数据至...

    比较详细的网站建设教程

    第十三章:CMS系统使用 内容管理系统(如WordPress、Joomla或Drupal)可以让非技术人员也能轻松管理网站。本章将教你如何安装和定制CMS。 第十四章:网页动画与特效 了解如何使用jQuery或GreenSock等工具创建网页...

    NCL graphics_manual

    - **第二十二章:指明标签** - 说明了如何在图形中添加标签。 - **附录A:命令源代码** - 列出了所有可用的命令源代码。 - **附录B:高级图形接口** - 详细介绍了高级图形接口的使用方法。 - **附录C:命名的颜色...

    (Wrox) Professional Iphone & Ipod Touch Programming--Building Applications For Mobile Safari

    ### 第二章:设计用户界面 本章重点介绍了设计美观且用户友好的界面所需的知识和技能。它涵盖了如何使用HTML、CSS和JavaScript来构建响应式布局,确保应用在不同的屏幕尺寸和方向下都能保持良好的视觉效果和用户...

    Silverlight初学者的入门课程

    #### 第二十三章:Silverlight中使用WCF示例 本章节提供了具体的示例代码,展示了如何在Silverlight应用程序中集成WCF服务,包括配置服务引用、处理响应数据等步骤。 #### 第二十四章:从Silverlight控件访问...

    轻松搞定ExtJS

    #### 第二十章:行模型与Grid视图 - **行选择模型**:讲解了如何配置GridPanel的行选择模型。 - **Grid视图**:介绍了Grid视图的概念及其在Extjs中的作用。 #### 第二十一章:GridPanel分页 - **跑跑题——JSON-LIB...

    Java_se基础毕向东老师全程笔记

    ### 第十三章至第十五章:Web前端技术 - **HTML**:标记语言,构建网页结构。 - **CSS**:样式表语言,控制页面样式。 - **JavaScript**:脚本语言,实现网页交互。 ### 第十六章:DOM - **文档对象模型**:描述XML...

    《Ajax与PHP基础教程》

    ### 第二章:创建第一个Ajax请求 一个基本的Ajax请求通常涉及以下几个步骤: 1. 创建XMLHttpRequest对象。 2. 配置请求,如URL、方法(GET或POST)、同步/异步等。 3. 打开连接到服务器的请求。 4. 发送数据(如果...

    毕向东Java SE视频教程整理笔记

    #### 第十三章至第十五章:Web前端技术 - **HTML/CSS/JavaScript基础**:这部分介绍了构建网页所需的基本技术,包括标记语言HTML、样式表语言CSS以及脚本语言JavaScript。 #### 第十六章:DOM - **DOM解析**:DOM...

Global site tag (gtag.js) - Google Analytics