上一篇随笔中记录了用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. OpenStack-Neutron-VPNaaS-API

    1 命令 1.1 IKE策略 vpn-ikepolicy-create Create an IKEPolicy vpn-ikepolicy-delete Delete a given IKE Poli ...

  2. Gradle引人注目的特性集

    Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具.它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML.当前其支持的语言限于Java. ...

  3. arcgis 制图-插值图

    1.生成插值图 插值工具: 方案1:Spatial Analyst 工具-->插值分析-->反距离权重法 (IDW) + Spatial Analyst 工具-->提取分析--> ...

  4. cxf配置

    先记录一下,后期补充配置原因 原先的spring3.X(struts2)的时候配置cxf2.x没问题,基本就是在context.xml中加入 <import resource="cla ...

  5. 谷歌浏览器怎样把网页全部内容保存为.mhtml文件?

    Chrome保存.mhtml网页文件的方法: 在 Chrome 地址栏中键入chrome://flags,回车, 在页面搜索栏输入mhtml 把“Save Page as MHTML”项修改为 Ena ...

  6. PHP与JavaScript下的Cookie操作

    下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...

  7. Docker Overlay 应用部署

    Docker Overlay 部署条件 要想使用Docker原生Overlay网络,需要满足以下任意条件: 1.Docker运行在Swarm模式 2.使用键值存储的Docker主机集群 本次部署使用键 ...

  8. Python Redis hash

    hash表现形式上有些像pyhton中的dict,可以存储一组关联性较强的数据 , redis中Hash在内存中的存储格式如下图: hset(name, key, value) # name对应的ha ...

  9. PLSQL远程连接数据库(亲测可试)

    一.准备工具: ORALCE数据库.PLSQL连接工具.确认网络正常 (我是在局域网中的,如果不是局域网,需要去ORACLE安装目录下找到sqlnet.ora 在里面找到 SQLNET.AUTHENT ...

  10. iOS开发 -------- AFNetworking实现简单的断点下载

    一 实现如下效果   二 实现代码 // // ViewController.m // AFNetworking实现断点下载 // // Created by lovestarfish on 15/1 ...