基于HTML+CSS实现的可交互照片墙Web页面
基于HTML+CSS实现的可交互照片墙Web页面
本文将详细介绍如何使用HTML、CSS和JavaScript实现一个可交互的照片墙Web页面。该照片墙支持点击照片查看大图、添加、删除和替换照片等功能,并且具有良好的过渡效果和响应式设计。
一、实验目的
本次实验的目的是练习HTML+CSS的布局与样式,以及简单的交互功能。
二、实验内容
制作一个可交互的照片墙,照片墙可以点击照片查看大图,并支持添加、删除和替换照片等功能。
三、实验步骤
1. 确定需求
照片墙是一个可以将照片按照一定的顺序排列的Web页面,基本要求是照片要合理地排布在页面上,且照片的尺寸要合适,布局要整齐。点击照片,可以在当前页面上方显示一个新的图层,其中显示这张照片的更大尺寸的图片。点击图层的其他位置可以隐藏该图层。可以向照片墙中添加照片,可以删除照片墙中的照片,可以替换照片墙的照片。页面要具有很好的过渡效果,且满足响应式设计,适应不同尺寸的设备。
2. 设计页面原型
根据需求,设计界面原型。上方居中显示标题和作者,主题部分为网格化布局照片,使用空白作为网格线。在正常计算机浏览器上每行显示4张图片,默认初始有12张图片。在平板电脑(宽度小于1024px大于690px)浏览器上每行显示3张图片。在手机(宽度小于690px)浏览器上每行显示两张图片。且在页面右下位置有一个固定不动的添加图片按钮。底端显示提示信息。大图页面为灰色蒙层,蒙层上为一张图片。在蒙层右下位置有一个删除按钮和一个替换按钮。
3. 实现布局
编写index.html
和index.css
。
关键技术:
主页面
Outside_block
中为页面主题部分,其中title_block
为标题,有两个标题标签组成,photo_block
是图片,由12张初始组成,bottom_block
为底端提示,由两个文字标签组成。其中图片布局采用flex布局,具体样式为:
对于容器整体,采用多余元素换行显示,水平、竖直以及每行行内竖直均为居中。
对于容器内的图片元素,采用百分比宽度20%设置图片宽度,同时确保每行显示4个图片。
加号按钮
在
outside_block
外设置一个div
作为新增图片的按钮,其中放置一个加号的图片。此外还需要添加一个隐藏的组件,用于触发选择文件。因为div
无法单纯通过点击事件调用选择文件的接口,因此将它的点击事件绑定到可以调用选择文件事件的input
上。具体样式为:
display:none
将input
隐藏。position:fixed
将元素设为固定布局,固定在页面的某个位置,不随页面的移动而移动。同时设置为为flex
容器,使其中的“+”号可以位于按钮的中央。大图图层
Big
为图层本身。Big_img
用于存放大图,其src
为空,动态填入。两个按钮使用
button
。Input
作用同上。伪类动作
对所有图片、按钮,使用
:hover {cursor: pointer}
使的当鼠标悬停时,变为指针。对图片,使用
:hover{transform.scale(1.1)}
设置鼠标悬停在图片上方时,图片略微放大以指示该图片。对三个按钮,使用
:hover{transform: translateY(-4px)}
设置鼠标悬停在按钮上方时,按钮向上浮动4px的效果。响应式设计
使用了flex布局,实现响应式设计。
同时在中设置viewport视窗,限制移动端的视窗长度。
4. 实现交互
编写index.js
,使用jQuery编写。
核心交互功能:
添加图片
将按钮(
.button
)的点击事件绑定到隐藏的文件输入上(.button_hidden
),并且监听选择文件改变事件change
。利用
FileReader
,对(id="upload"
)选择的文件file
,进行读取,并且使用src
接收返回的图片base64格式编码(存放在oFRevent.target.result
)中。在将或得到的
src
插入一个标签中,添加到photo_block
最后。查看大图
为所有的图片添加点击事件
show
,对于新增的DOM节点,由于JS的渲染特性为在加载时一次性渲染,因此无法绑定上述事件。使用on
函数,监听未知img
节点的点击事件,并绑定响应函数show
。并将触发点击事件的元素id存入全局变量中。传入参数为当前被点击的DOM对象,
show
函数为:首先获取被点击图片的
src
,并将它赋给大图big_img
。再根据当前窗口的大小和图片的尺寸,设置大图的尺寸。若图片是宽大于高,则将宽设置为窗口宽度的scale倍,否则将高设置额为窗口高度为scale被,并等比例缩放。将新的宽度、高度赋予
big_img
,并计算边距,赋予内部div
(.inner
)。设置完成后,使用
fadeIn
将大图图层显示出来(".big"
)。对大图图层,设置隐藏函数
fadeOut
响应点击事件。删除图片
直接使用
remove
删除。替换图片
原理同新增图片,拿到
src
后替换原有src
。
四、实验结果
以下是实验结果的界面效果: