上一篇随笔中记录了用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章的更多相关文章

  1. JavaScript DOM编程艺术读书笔记(三)

    第七章 动态创建标记 在web浏览器中往文档添加标记,先回顾下过去使用的技术: <body> <script type="text/javascript"> ...

  2. JavaScript DOM编程艺术读书笔记(二)

    第五章 最佳实践 平稳退化(graceful degradation):如果正确使用了JavaScript脚本,可以让访问者在他们的浏览器不支持JavaScript的情况下仍能顺利地浏览你网站.虽然某 ...

  3. JavaScript DOM编程艺术读书笔记(一)

    第一章,第二章 DOM:是一套对文档的内容进行抽象和概念化的方法. W3C中的定义:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容,结构和样式. DHTML( ...

  4. JavaScript DOM编程艺术 - 读书笔记1-3章

    1.JavaScript语法 准备工作 一个普通的文本编辑器,一个Web浏览器. JavaScript代码必须通过Html文档才能执行,第一种方式是将JavaScript代码放到文档<head& ...

  5. JavaScript DOM编程艺术 读书笔记

    2. JavaScript语法 2.1 注释      HTML允许使用"<!--"注释跨越多个行,但JavaScript要求这种注释的每行都必须在开头加上"< ...

  6. JavaScript DOM编程艺术读书笔记(四)

    第十章 实现动画效果 var repeat = "moveElement('"+elementID+"',"+final_x+","+fin ...

  7. JavaScript DOM编程艺术-学习笔记(第二章)

    1.好习惯从末尾加分号:开始 2.js区分大小写 3.程序界万能的命名法则:①不以,数字开头的数字.字母.下划线.美元符号 ②提倡以下划线命名法来命名变量,以驼峰命名法来命名函数.但是到了公司往往会身 ...

  8. 《javascript dom编程艺术》笔记(一)——优雅降级、向后兼容、多个函数绑定onload函数

    刚刚开始自学前端,如果不对请指正:欢迎各位技术大牛指点. 开始学习<javascript dom编程艺术>,整理一下学习到的知识.今天刚刚看到第六章,记下get到的几个知识点. 优雅降级 ...

  9. JavaScript DOM编程艺术学习笔记(一)

    嗯,经过了一周的时间,今天终于将<JavaScript DOM编程艺术(第2版)>这本书看完了,感觉受益匪浅,我和作者及出版社等等都不认识,无意为他们做广告,不过本书确实值得一看,也值得推 ...

  10. JavaScript DOM编程艺术-学习笔记

    发现基础不是很好,补习一下.37买了2本书(dom编程和高级程序设计). 以前读书总是自己勾勾画画,有点没意思.现在写下来,说不定会成为传世经典.哈哈...........随便扯扯淡. 第一天(201 ...

随机推荐

  1. nginx根据CPU配置多线程运行

    转自:Nginx使用教程(二):Nginx配置性能优化之worker配置 配置Nginx workers <br\>NGINX根据指定的配置运行固定数量的工作进程. 这些工作进程负责处理所 ...

  2. Nginx 多域名配置

    nginx绑定多个域名可又把多个域名规则写一个配置文件里,也可又分别建立多个域名配置文件,我一般为了管理方便,每个域名建一个文件,有些同类域名也可又写在一个总的配置文件里.一.每个域名一个文件的写法  ...

  3. delphi “div”、“mod”、“\”除法运算符的区别与使用方法(附带FORMAT使用方法)

    Delphi中和除法相关的算术运算符有: div.mod和符号“\” 下面分别对他们的作用.操作数类型和返回值类型进行一下介绍: div:对2个整数进行除,取商,操作数需是integer类型,返回值也 ...

  4. vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题

    vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题 今天下载了一个开源项目一直运行不了,折腾了半天才找到问题所在,config ...

  5. Poj3624 Charm Bracelet (01背包)

    题目链接:http://poj.org/problem?id=3624 Description Bessie has gone to the mall's jewelry store and spie ...

  6. Poj3176 Cow Bowling (动态规划 数字三角形)

    Description The cows don't use actual bowling balls when they go bowling. They each take a number (i ...

  7. 记账本微信小程序开发七

    完成所有后续代码 主页代码 教程做的感觉很好,但是自己做出来感觉就low了很多,还是有很多需要改进的地方,这也是我下一步的改进点.

  8. 提交SR的一些小技巧

    在平时的时候,遇到一些问题总会在metalink上提交SR(Service Request,SR,过去也叫Technical Assistance Request,TAR ),我们提交sr的时候,总是 ...

  9. vue elementui报错总结

    1.  错误: TypeError: _self.$scopedSlots.default is not a function 原因:这是因为在v-for/v-if切换标签时,原本这些标签每一个都是独 ...

  10. IdentityServer4 错误解决方案

    错误 解决方案 Grant types list cannot contain both xx and xx 以下授权类型不能同时存在: Implicit AuthorizationCode Impl ...