《JavaScript Dom 编程艺术》读书笔记-第5章
上一篇随笔中记录了用JavaScript建一个基础图片库,但实际上还有很多地方可以改进。第五章将逐步进行改进,这一章里需要明白的道理是达到目标的过程和达到目标同样重要~
第五章:最佳实践
5.1 过去的错误
如果要使用JavaScript,就要确认,这么做对于用户的浏览体验产生怎样的影响,如果用户的浏览器不支持JavaScript怎么办?
5.2 平稳退化
平稳退化:如果正确使用JavaScript脚本,就可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利访问你的网站。即,虽然某些功能无法使用,但最基本的操作仍然能顺利完成。
例子:在新窗口里打开一个链接。(点击某个链接时弹出一个新窗口)
ps:应该旨在绝对必要的情况下才使用弹出窗口,因为这将牵涉到网页的可访问性问题。
window.open(URL,name,features);
//三个参数都是可选
//第一个参数代表想在新窗口中打开的URL地址,如果省略,将打开空白的窗口。
//第二个参数是新窗口的名字。可以通过这个名字与新窗口通信。
//第三个参数是以逗号分隔的字符串,其内容是新窗口的各种属性。原则:新窗口的浏览功能要少而精。
一个典型应用:
function popUp(winURL){//将打开一个320像素宽,480像素高的新窗口“popup”
window.open(winURL,"popup","width=320,height=480");
}
1. 在 HTML中调用此函数的一个方法就是使用“javascript: ”伪协议,让我们通过一个链接来调用JavaScript函数。
<a href="javascript:popUp('https://www.baidu.com')">example</a>
在较老的浏览器中尝试打开链接但失败,支持这种伪协议但禁用JavaScript的浏览器会什么也不做。总之这种方式不好。
2. 用onclick事件处理函数来调用popUp函数。
<a href="#" onclick="popUp('https://www.baidu.com');return false;">example</a>
也不能平稳退化。
3. 第2种的改进,满足平稳退化
<a href="https://www.baidu.com" onclick="popUp(this.getAttribute("href"));return false;" >example</a>
5.3 向CSS学习
CSS 层叠样式表,能够帮助你将web文档的内容结构(标记)和版面设计(样式)分离开来,这样能保证页面的平稳退化。
渐进增强:用一些额外的信息层去包裹原始数据。按“渐进增强”原则创建出来的页面几乎都符合平稳退化。
“标记良好的内容就是一切”,即使去掉CSS,文档的内容也可以访问。
5.4 分离JavaScript
之前的JavaScript已经和HTML分开了,问题出在内嵌的事件处理函数中。
<a href="https://www.baidu.com" class="popup">example</a>
window.onload=function(){ //在HTML加载完毕后会触发onload事件
var links=document.getAttributeByTagName("a");//将文档里的所有连接发至到一个数组里。
for (var i=0;i<links.length ;i++ )//遍历数组
{
//如果某个classs属性等于popup,就在这个链接被点击时调用popUp函数。
if (links[i].getAttribute("class")=="popup")
{
links[i].onclick=function(){
popUp(this.getAttribute("href"));
return false;
}
}
}
}
5.5 向后兼容
对象检测:检测浏览器对于JavaScript的支持程度。
window.onload=function(){
if (!document.getAttributeByTagName)//检测 浏览器是否支持getAttributeByTagName这个方法
{
return false;
}
var links=document.getAttributeByTagName("a");
for (var i=0;i<links.length ;i++ )
{
if (links[i].getAttribute("class")=="popup")
{
links[i].onclick=function(){
popUp(this.getAttribute("href"));
return false
}
}
}
}
5.6 性能考虑
尽量减访问DOM,尽量减少标记。
合并和放置脚本。
压缩脚本。
5.7 小结
平稳退化。
分离JavaScript。
向后兼容。
性能考虑。
《JavaScript Dom 编程艺术》读书笔记-第5章的更多相关文章
- JavaScript DOM编程艺术读书笔记(三)
第七章 动态创建标记 在web浏览器中往文档添加标记,先回顾下过去使用的技术: <body> <script type="text/javascript"> ...
- JavaScript DOM编程艺术读书笔记(二)
第五章 最佳实践 平稳退化(graceful degradation):如果正确使用了JavaScript脚本,可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你网站.虽然某 ...
- JavaScript DOM编程艺术读书笔记(一)
第一章,第二章 DOM:是一套对文档的内容进行抽象和概念化的方法. W3C中的定义:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容,结构和样式. DHTML( ...
- JavaScript DOM编程艺术 - 读书笔记1-3章
1.JavaScript语法 准备工作 一个普通的文本编辑器,一个Web浏览器. JavaScript代码必须通过Html文档才能执行,第一种方式是将JavaScript代码放到文档<head& ...
- JavaScript DOM编程艺术 读书笔记
2. JavaScript语法 2.1 注释 HTML允许使用"<!--"注释跨越多个行,但JavaScript要求这种注释的每行都必须在开头加上"< ...
- JavaScript DOM编程艺术读书笔记(四)
第十章 实现动画效果 var repeat = "moveElement('"+elementID+"',"+final_x+","+fin ...
- JavaScript DOM编程艺术-学习笔记(第二章)
1.好习惯从末尾加分号:开始 2.js区分大小写 3.程序界万能的命名法则:①不以,数字开头的数字.字母.下划线.美元符号 ②提倡以下划线命名法来命名变量,以驼峰命名法来命名函数.但是到了公司往往会身 ...
- 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数
刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...
- JavaScript DOM编程艺术学习笔记(一)
嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...
- JavaScript DOM编程艺术-学习笔记
发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...
随机推荐
- C#-----中使用using详解
1.using指令 using + 命名空间名字 例:using System; using System.Data; 2.using语句 定义一个范围,在范围结束时处理对象,出了这个范 ...
- Java Hello World源代码notepad++版
Notepad++中写Java Hello World代码并运行,步骤如下: 1. 在E:\CodeDemo\Java文件夹下(你也可以选择自己的文件夹)新建一个txt文本文件. 如果没有NotePa ...
- 连接redis错误:ERR Client sent AUTH, but no password is set
问题原因:没有设置redis的密码 解决:命令行进入Redis的文件夹: D:\Redis-x64-3.2.100>redis-cli.exe 查看是否设置了密码: 127.0.0.1:6379 ...
- 剑指offer(33)丑数
题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 题目分析 ...
- Excel 表格查找重复数据,去重复统计
找出表格是否有重复数据: =IF(AND(G20=G19,D20=D19),"是","否") 筛选移除[重复的数据]然后开始统计 =SUBTOTAL(9,E2: ...
- 【Python】【内置函数】
[fromkeys()] -- coding: utf-8 -- python 27 xiaodeng python之函数用法fromkeys() fromkeys() 说明:用于创建一个新字典,以序 ...
- mac系统删除.DS_Store文件
查找某目录下某类文件 find . -name ".DS_Store" -type f -print # find: 主命令 # . : 当前目录下(可变) # -name: 通过 ...
- 使用Rancher的RKE快速部署Kubernetes集群
简要说明: 本文共涉及3台Ubuntu机器,1台RKE部署机器(192.168.3.161),2台Kubernetes集群机器(3.162和3.163). 先在Windows机器上,将rke_linu ...
- java笔记 -- java数据类型与类型转换
Java是一种强类型语言, 这就意味着必须为每一个变量声明一种类型. Java中一共有8中基本类型: 4种整型: 整型: 用于表示没有小数部分的数值, 允许为负数 类型 存储需求 取值范围 int: ...
- R导出图后用AI和PS处理
1)使用pdf()函数导出后,用AI打开,首先是将选中所有要用到的元素,组合为一个文件,然后设置为你最终要的大小,比如你要180mm,那么可以考虑设置为178,因为要留个窄窄的边. 2)然后设置字体和 ...