使用的编辑器是Hbuilder,浏览器是Chrome。

HTML和JavaScript代码分离,会使得修改网页功能和代码的阅读与维护会轻松的许多,不用在DOM中阅读大量的JavaScript代码。

文中主要是一个图片库的实现,是在学习JavaScript DOM编程艺术一书时的随笔,如有理解不对,或是有明显错误的地方还请指出。

HTML的代码部分:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Image Gallery</title>
<link rel="stylesheet" type="text/css" href="layout.css"/>
</head>
<body>
<h1>Snapshots</h1>
<ul id="imagegallery">
<li>
<a href="images/1.png" title="shi lai mu">史莱姆</a>
</li>
<li>
<a href="images/2.png" title="long wang">龙王</a>
</li>
<li>
<a href="images/3.png" title="qi mu nan xiong">齐木楠雄</a>
</li>
<li>
<a href="images/4.png" title="1988">1988</a>
</li>
</ul>
<!-- <img id="placeholder" src="data:images/6.png" alt="my image gallery">
<p id="description">Choose an image</p> -->
<script src="showPic.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>

JavaScript代码部分:

//DOM读取完即加载
addLoadEvent(preparePlaceholder);
addLoadEvent(prepareGallery);

//增加多个window.onload
function addLoadEvent(func) {
var oldonload = window.onload;//将window.onload中的函数赋给oldonload
if (typeof window.onload != 'function') {//如果window.onload不是函数类型,即其中没有函数则将需要onload的函数赋值给它
window.onload = func;
} else {//否则将两个函数合并
window.onload = function() {
oldonload();
func();
}

}

//插入到目标元素后面
function insertAfter(newElement, targetElement) {
var parent = targetElement.parentNode;//获取目标元素的父节点
if (targetElement == parent.lastChild) {//如果父节点的最后一个子节点是目标节点,则直接添加新元素节点
parent.appendChild(newElement);
} else {//否则将新节点加在目标元素的后一个节点之前,即放在目标元素之后
parent.insertBefore(newElement, targetElement.nextSibling);
}
}

//预加载imagegallery中的属性元素
function prepareGallery() {
if (!document.getElementsByTagName) {
return false;
} //验证getElementsByTagName是否可以使用
if (!document.getElementById) {
return false;
} //验证getElementByID是否可以使用
if (!document.getElementById("imagegallery")) {
return false;
} //验证“imagegallery”id是否存在
var gallery = document.getElementById("imagegallery"); //获取id名为“imagegallery”的数组
var links = gallery.getElementsByTagName("a"); //获取数组里的“a”标签数组
for (var i = 0; i < links.length; i++) { //对“a”数组遍历并逐个操作
links[i].onclick = function() {
return !showPic(this); //平稳退化
}
//links[i].onkeypress = links[i].onclick; //没有也行。。。
}
}

//初始化占位符的相关属性
function preparePlaceholder(){
if(!document.getElementById) return false;
if(!document.createElement) return false;
if(!document.createTextNode) return false;
if(!document.getElementById("imagegallery")) return false; //判断是否可以使用这些函数以及ID

//新建占位图片 设置占位图片的属性节点
var placeholder = document.createElement("img");
placeholder.setAttribute("id", "placeholder");
placeholder.setAttribute("src", "images/6.png");
placeholder.setAttribute("alt", "my image gallery");

//新建占位字符 设置占位字符的属性节点和文字节点
var description = document.createElement("p");
description.setAttribute("id", "description");
var txt = document.createTextNode("Choose an image");
description.appendChild(txt);

//找到图片列表并将占位图片、占位文字依次放在后面
var gallery = document.getElementById("imagegallery");
insertAfter(placeholder, gallery);
insertAfter(description, placeholder);
}

//主要体现平稳退化思想
function showPic(whichpic) {
if (!document.getElementById("placeholder")) {
return false;
} //验证“placeholder”id是否存在
var source = whichpic.getAttribute("href"); //获取被点击的链接的目标地址
var placeholder = document.getElementById("placeholder"); //获取占位图片的元素ID待操作
placeholder.setAttribute("src", source); //将获取到的被点击的链接地址赋值给占位图片的链接地址

if (document.getElementById("description")) { //判断“description”id是否存在,不存在则不做操作,存在则修改,属于锦上添花,代码不执行无较大影响
var text = whichpic.getAttribute("title") ? whichpic.getAttribute("title") : ""; //确定被点击链接的title值,没有则赋为空字符
var description = document.getElementById("description"); //获取字符占位符
if (description.firstChild.nodeType == 3) { //判断子节点的类型是否为字符节点
description.firstChild.nodeValue = text; //将被点击链接的title值赋值给占位符的字符节点
}
}
return true;
}

css代码部分:

body{
font-family: "helvetica", "Arial", serif;
color:#333;
background-color: #ccc;
margin: 1em;
}
h1{
color: #333;
background-color: transparent;
}
a{
color: #c60;
background-color: transparent;
font-weight: bold;
text-decoration: none ;
}
ul{
padding: 0;
}
img{
display: block;
clear: both;
}

复制到编译器需要整理代码格式。

转载于:https://www.cnblogs.com/sakuraneo/p/10898785.html

HTML和JavaScript代码分离、平稳退化(1)相关推荐

  1. javascript 代码分离 的那些事儿

    javascript 代码分离 的那些事儿 注意: 我们时常都需要修改代码,因此,我们需要把代码调整为代码分离状态,并让它保持良好的代码分离状态. 核心概念 就是 保持行为层.内容层.表现层的分离. ...

  2. javascript DOM 编程艺术 札记2 平稳退化

    定义 指的是即便浏览器不支持javascript,页面的基础展示功能也不会受到影响的做法. 不能平稳退化的实例 javascript:这种伪协议,它可以通过链接调用javascript函数.比如< ...

  3. javascript 性能 · 平稳退化、渐进增强

    浅尝 javascript 平稳退化和渐进增强 何为平稳退化?何为渐进增强? 下面举例说明: 例如,有的早期的纯文本浏览器中不支持在html里包含图片,相应是使用alt属性的替代文本. 而现在的浏览器 ...

  4. javascript 实现图片切换,考虑平稳退化与行为结构分离

    最近在学习JavaScript DOM编程艺术,跟着学习把里面的一个demo 敲了,demo 是小玩意,但是在编程习惯上给了我很大的启发. 考虑"平稳退化":如果浏览器不支持或者禁 ...

  5. 翻译-高质量JavaScript代码书写基本要点(转载)

    by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:S ...

  6. Webpack 代码分离

    Webpack 代码分离 ? 提示: 版本问题 本文基于 webpack 2.x 版本.webpack 2.x 相比 webpack 1.x 有重大改变.所以,如果你的项目中已使用了 webpack ...

  7. php 怎么写个定时自理器,教你编写更加稳定、可读性强的JavaScript代码的示例

    每个人都有自己的编程风格,也无可避免的要去感受别人的编程风格--修改别人的代码."修改别人的代码"对于我们来说的一件很痛苦的事情.因为有些代码并不是那么容易阅读.可维护的,让另一个 ...

  8. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    才华横溢的Stoyan Stefanov,在他写的由O'Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会 ...

  9. javascript 代码_如何开始对JavaScript代码进行单元测试

    javascript 代码 We all know we should write unit tests. But, it's hard to know where to start and how ...

最新文章

  1. 难以想象SpringBoot中的条件注解底层居然是这样实现的
  2. 输入一个数组,逆序存放在另一个数组并输出
  3. Spring点滴一:Spring Ioc 容器
  4. php定时爬虫,thinkphp5使用workerman定时器定时爬取站点内容的代码
  5. 第05篇:C#星夜拾遗之使用数据库
  6. POJ2503 Babelfish map或者hash_map
  7. Flink 源码 | 自定义 Format 消费 Maxwell CDC 数据
  8. 关于 java 实现 语音朗读
  9. (224)FPGA数字信号处理入门指导
  10. C++基于STL的演讲比赛流程管理系统
  11. Python sys 使用说明
  12. 深度学习花书-5.4 估计、偏差和方差
  13. 层次低的人复杂,境界高的人简单,总结得真深刻!
  14. 笔记本没有Insert键怎么办
  15. 微信如何定时发朋友圈?一招教你解决
  16. 华为机试二星题--机器人走迷宫
  17. 最近很火的程序员成语,你知道几个?
  18. LCD12864 菜单部分编写
  19. 微信企业号加密异常处理:InvalidKeyException
  20. 第三周总结(2022.10.31~2022.11.4)

热门文章

  1. hibernate学习(4)
  2. JAVA中的反射()
  3. ​周锦民:腾讯在线教育视频互动直播间技术实践
  4. Action 参数的取值及其含义
  5. regression
  6. python 1033 旧键盘打字 (20 分)
  7. BZOJ2339: [HNOI2011]卡农(dp 容斥)
  8. 洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game
  9. python-包package
  10. GVIM工具之gvim的配色方式