经典案例——图片库

案例介绍:

将图片发布有很多方法,可以将所有图片直接统一放在网页里,但是这样加载网页就会十分缓慢。我们也可以为每一张图片设计一个像网页,就不存在加载缓慢的问题,但是这对于设计人员来说是繁琐的,这个时候我们可以考虑创建一个图片库:
把整个图片库的浏览链接集中放在图片库主页里,只在用户点击了这个主页的链接时才把相应的链接发送给他:
在这里插入图片描述
设计要求:
1.设置HTML和CSS样式
2.将图片展示在网页中
3.在点击链接后将网页中的图片替换,而不是网页跳转
4.点击链接伴随着图片下方文字的替换

HTML结构

在hml部分,设计十分简单,我们只要求能够将超链接,图片,文字展示即可,布局如下:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Photo Gallery</title>
	<link rel="stylesheet" type="text/css" href="photo gallery.css">
	<script src="photo gallery.js"></script>
</head>
<body>
	<h1>Photo Gallery</h1>
	<ul>
		<li><a href="images/1.png" onclick="showPic(this);return false;" title="基普乔格1">基普乔格1</a></li>
		<li><a href="images/2.png" onclick="showPic(this);return false;" title="基普乔格2">基普乔格2</a></li>
		<li><a href="images/3.png" onclick="showPic(this);return false;" title="基普乔格3">基普乔格3</a></li>
		<li><a href="images/4.png" onclick="showPic(this);return false;" title="贝克勒1">贝克勒1</a></li>
		<li><a href="images/5.png" onclick="showPic(this);return false;" title="贝克勒2">贝克勒2</a></li>
		<li><a href="images/6.png" onclick="showPic(this);return false;" title="贝克勒3">贝克勒3</a></li>
	</ul>
	<div id="box">
		<img id="placeholder" src="images/7.png" height="300" width="400" alt="my image gallery"/>
		<p id="description">Choose a image</p>
	</div>

</body>
</html>

这个时候的框架如下:
在这里插入图片描述

CSS样式

将超链接横向排列,并且间列表的标识消除:
设置li为左浮动,list-style-type为none无标识符.

li{
	float: left;
	padding: 1em;
	list-style-type: none;
}
a{
	color: #c60;
	background-color: transparent;
	font-weight: bold;
	text-decoration:none;
}

以下是所有CSS样式:

body{
	font-family: "Helvetica","Arial",serif;
	color:#C0C0C0  ;
	background-color:#483D8B;
	margin: 1em 10%;
}
#box{
	width: 400px;
	height: 300px;
	border:1px 	solid #8A2BE2;
	margin: 8em 8px;
}
a{
	color: #c60;
	background-color: transparent;
	font-weight: bold;
	text-decoration:none;
}
ul{
	padding: 0;
}
li{
	float: left;
	padding: 1em;
	list-style-type: none;
}
img{
	display: block;
	clear: both;
}
p{
	color:#C0C0C0 ;
}

设置CSS后的效果:
在这里插入图片描述

JS部分——对DOM进行操作

设置好HTML和CSS部分之后,问题任然没有解决,在点击链接后要将网页中的图片替换,而不是网页跳转,点击链接要伴随着图片下方文字的替换。那么我们一起来实现这两个部分:

(1)在点击链接后要将网页中的图片替换

如何实现?对DOM进行操作,每次点击,onclick得到一个元素节点信息this,我们对this进行处理,获取this的href属性值,然后将这个属性值添加覆盖到展示区域的img属性上。
为了方便调用,我们给这个过程设置一个函数,在函数内部进行处理,增强代码的可读性,更加简洁。

function showPic(element){
	var source=element.getAttribute("href");//获取元素节点的src属性值
	var placeholder=document.getElementById("placeholder");//查找placeholder元素
	placeholder.setAttribute("src",source);//设置placeholder的src属性值为
}

这个时候可以顺利将属性添加到展示区域了,但是网页仍然会跳转,这个时候用到事件处理函数:

函数 描述
onmouseover 鼠标悬停在某个元素上时触发
onmouseout 鼠标离开某一个元素时触发
onclick 鼠标点击一个元素时触发

我们在onclick内部返回一个false,onclick函数就会认为没有点击过元素,这个时候就能达到点击的效果了:

<a href="images/1.png" onclick="showPic(this);return false;" 
title="基普乔格1">基普乔格1</a>

(2)在点击链接后要将图片下方的文字替换

要实现文本的属性修改,和(1)中的操作基本类似,先获取到超链接的title属性值,然后利用element.innerHTML可以对标签之间的文字进行修改:

function showPic(element){
	var description=document.getElementById("description");//获取元素节点description
	var text=element.getAttribute("title");//获取element的title属性值
	description.innerHTML=text;//对description的文本内容进行修改
}

这样一来就达到了修改文本的目的,另外引入一种修改文本的方法:
在这里插入图片描述
函数text部分的另外一种写法:

function showPic(element){
	var text=element.getAttribute("title");
	description.firstChild.nodeValue=text;
}

代码汇总:
HTML:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Photo Gallery</title>
	<link rel="stylesheet" type="text/css" href="photo gallery.css">
	<script src="photo gallery.js"></script>
</head>
<body>
	<h1>Photo Gallery</h1>
	<ul>
		<li><a href="images/1.png" onclick="showPic(this);return false;" title="基普乔格1">基普乔格1</a></li>
		<li><a href="images/2.png" onclick="showPic(this);return false;" title="基普乔格2">基普乔格2</a></li>
		<li><a href="images/3.png" onclick="showPic(this);return false;" title="基普乔格3">基普乔格3</a></li>
		<li><a href="images/4.png" onclick="showPic(this);return false;" title="贝克勒1">贝克勒1</a></li>
		<li><a href="images/5.png" onclick="showPic(this);return false;" title="贝克勒2">贝克勒2</a></li>
		<li><a href="images/6.png" onclick="showPic(this);return false;" title="贝克勒3">贝克勒3</a></li>
	</ul>
	<div id="box">
		<img id="placeholder" src="images/7.png" height="300" width="400" alt="my image gallery"/>
		<p id="description">Choose a image</p>
	</div>

</body>
</html>

CSS

body{
	font-family: "Helvetica","Arial",serif;
	color:#C0C0C0  ;
	background-color:#483D8B;
	margin: 1em 10%;
}
#box{
	width: 400px;
	height: 300px;
	border:1px 	solid #8A2BE2;
	margin: 8em 8px;
}
a{
	color: #c60;
	background-color: transparent;
	font-weight: bold;
	text-decoration:none;
}
ul{
	padding: 0;
}
li{
	float: left;
	padding: 1em;
	list-style-type: none;
}
img{
	display: block;
	clear: both;
}
p{
	color:#C0C0C0 ;
}
function showPic(element){
	var source=element.getAttribute("href");//获取元素节点的src属性值
	var placeholder=document.getElementById("placeholder");//查找placeholder元素及诶8I节点
	placeholder.setAttribute("src",source);//设置placeholder的src属性值为
	var description=document.getElementById("description");//获取元素p
	var text=element.getAttribute("title");
	description.firstChild.nodeValue=text;
}

效果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

发布了106 篇原创文章 · 获赞 73 · 访问量 7324

猜你喜欢

转载自blog.csdn.net/weixin_44307065/article/details/104028908
今日推荐