js学习笔记(五)图片库实例

HTML结构如下

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Shopping list</title>
</head>
<script type="text/javascript" src="scripts/showPic.js"></script>
<link rel="stylesheet" href="scripts/style.css" media="screen">
<body>
<h1>Snapshots</h1>

<ul id="imagegallery">
  <li><a href="images/fireworks.jpg" title="A fireworks display">Fireworks</a></li>
  <li><a href="images/coffee.jpg" title="A cup of black coffee">Coffee</a></li>
  <li><a href="images/rose.jpg" title="A red, red rose">Rose</a></li>
  <li><a href="images/bigben.jpg" title="The famous clock">Big Ben</a></li>
</ul>

<img id="placeholder" src="images/placeholder.jpg" alt="my image gallery" />
<p id="description">Choose an image.</p>

</body>
</html>

JS代码如下

function showPic(whichpic)  /*whichpic代表着一个元素节点,具体指向某个图片的<a>元素*/
 {
     if(!document.getElementById("placeholder")) return false;/*检查id为placeholder元素*/
     var source = whichpic.getAttribute("href"); /*获取a元素上的图片文件路径 将路径存入变量source*/
     var placeholder = document.getElementById("placeholder"); /*获取占位符图 存入变量placeholder*/
     if(placeholder.nodeName != "IMG") return false;/*检查变量placeholder的图片元素*/
     placeholder.setAttribute("src",source);  /*对占位符图片路径刷新*/

     if(document.getElementById("description")) /*检查id为description元素*/
     {
         var text = whichpic.getAttribute("title")?whichpic.getAttribute("title"):""; /*如果a元素上有title则赋值title元素,如果没有,则赋值空字符串*/
         var description = document.getElementById("description");
         if(description.firstChild.nodeType == 3)
         {
            description.firstChild.nodeValue = text;  /*把description对象的第一个子节点的nodeValue属性值设置为变量text的值。*/
         }
     }
     return true;
 }

function prepareGallery()
{
    if(!document.getElementsByTagName)return false;/*检查getElementsByTagName方法*/
    if(!document.getElementById)return false;/*检查getElementById方法*/
    if(!document.getElementById("imagegallery"))return false;/*检查imagegaller元素是否存在*/

    var gallery = document.getElementById("imagegallery"); /*获取imagegallery id赋值给gallery*/
    var links = gallery.getElementsByTagName("a");/*获取gallery的a链接元素赋值给links*/

    /*for循环遍历links数组*/
    for(var i=0; i<links.length; i++)
    {
        links[i].onclick = function()       /*每次点击执行showPic()函数*/
        {
            return showPic(this)?false:true; /*判断默认行为*/
        }
    }
}

/*
共享onlond事件,封装成一个函数,@func是页面加载时需要执行的那个函数。
如果window.onload在页面加载时还没有绑定任何函数,就把需要执行的函数添加给它、
如果这个处理函数已经绑定了函数,就把新函数追加到现有指令的末尾
*/
function addLoadEvent(func)
{
    var oldonload = window.onload; /*把window.onload事件处理函数存入变量oldonload*/
    if(typeof window.onload != ‘function‘)
    {
        window.onload = func;
    }else
     {
        window.onload = function()
        {
            oldonload();
            func();
        }
     }
}
addLoadEvent(prepareGallery);

首先是showPic函数

定义source变量获取a元素的路径,再定义placeholder的元素获取id为placeholder的占位符图片。

if(!document.getElementById("placeholder")) return false;这段代码用于检查id为placeholder元素是否存在;

if(placeholder.nodeName != "IMG") return false;则检查变量placeholder的图片元素是否存在;

placeholder.setAttribute("src",source);  则对占位符图片路径刷新;

接下来if(document.getElementById("description")) 判断id为description元素是否存在,如果存在则修改图片文字;

var text = whichpic.getAttribute("title")?whichpic.getAttribute("title"):""; 定义变量text判断whichpic的a元素上有title则赋值title值,如果没有,则赋值空字符串;

var description = document.getElementById("description"); 获取id为description并赋值变量description;

if(description.firstChild.nodeType == 3)判断description元素的第一个子元素是否为一个文本节点。(nodeType是用来获得当前节点对象的类型。文本text=3 )

description.firstChild.nodeValue = text;  把description对象的第一个子节点的nodeValue属性值设置为变量text的值。

然后是prepareGallery函数

if(!document.getElementsByTagName)return false;
if(!document.getElementById)return false;
if(!document.getElementById("imagegallery"))return false;

前两段代码分别检查getElementsByTagNamegetElementById方法,第三段代码价差idimagegallery元素是否存在。

var gallery = document.getElementById("imagegallery"); 获取imagegallery id赋值给gallery
var links = gallery.getElementsByTagName("a");获取gallery的a链接元素赋值给links

for循环遍历

return showPic(this)?false:true;判断浏览器的默认行为,showPic(this)里的this 指的是当前指定元素,也就是links[i]。

时间: 2024-08-08 22:05:51

js学习笔记(五)图片库实例的相关文章

angular学习笔记(五)-阶乘计算实例(1)

<!DOCTYPE html> <html ng-app> <head> <title>2.3.2计算阶乘实例1</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="script.js"></script> </

angular学习笔记(五)-阶乘计算实例(2)

<!DOCTYPE html> <html ng-app> <head> <title>2.3.3计算阶乘实例2</title> <meta charset="utf-8"> <script src="../angular.js"></script> <script src="script.js"></script> </

Ext JS学习第五天 Ext_window组件(一)

此文来记录学习笔记 •第一个组件:Ext.window.Window.对于组件,也就是Ext最吸引开发者的地方,那么我们要真正的使用Ext的组件,首先必须学会阅读API文档. –xtype:组件的别名 –Hierarchy 层次结构 –Inherited mixins 混入的类 –Requires 该组件需要使用的类 –configs:组件的配置信息 –properties:组件的属性 –methods:组件的方法 –events:组件的事件 •window组件常用属性和方法讲解: •confi

Caliburn.Micro学习笔记(五)----协同IResult

Caliburn.Micro学习笔记(五)----协同IResult 今天说一下协同IResult 看一下IResult接口 /// <summary> /// Allows custom code to execute after the return of a action. /// </summary> public interface IResult { /// <summary> /// Executes the result using the specif

【转】Backbone.js学习笔记(二)细说MVC

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Ext JS学习第五天 Ext_window组件(二)

此文用来记录学习笔记 •上一讲我们已经学过了window的使用,那么在这将中,我们将结合然后把Ext中需要注意的地方,以及组建的使用给予介绍.indow做几个Web开发的经典示例. •ExtWeb实战300例: –例1:点击按钮打开一个window,window重复创建的问题 •重点分析:这个问题是初学者经常会犯错的地方,一般来说简单的代码不会产生此问题,但是如果以后代码复杂以后,这个问题如果发生调试起来会非常麻烦!! 附上栗子代码 1 Ext.onReady(function () { 2 3

Angular JS 学习笔记

特定领域语言 编译器:遍历DOM来查找和它相关的属性, 分为编译和链接两个阶段, 指令:当关联的HTML结构进入编译阶段时应该执行的操作,可以写在名称里,属性里,css类名里:本质上是函数 稳定的DOM:绑定了数据模型的DOM元素的实例不会在绑定的生命周期发生改变 作用域:用来检测模型的改变和为表达式提供执行上下文的 AngularJS 和其它模板系统不同,它使用的是DOM而不是字符串 指令: 由某个属性.元素名称.css类名出现而导致的行为,或者说是DOM的变化 Filter过滤器:扮演着数据

JS学习笔记-OO疑问之对象创建

问一.引入工厂,解决重复代码 前面已经提到,JS中创建对象的方法,不难发现,基本的创建方法中,创建一个对象还算简单,如果创建多个类似的对象的话就会产生大量重复的代码. 解决:工厂模式方法(添加一个专门创建对象的方法,传入参数避免重复) function createObject(name,age){ var obj =new Object(); //创建对象 obj.name = name; obj.age = age; obj.run = function(){ return this.nam

js学习笔记知识点

AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: 'use strict'; function success(text) { var textarea = document.getE

系列文章--Node.js学习笔记系列

Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学习笔记(四)--- 与MySQL交互(felixge/node-mysql) Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识 Nodejs学习笔记(七)--- Node.js + Exp