问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于HTML+CSS实现的可交互照片墙Web页面

创作时间:
作者:
@小白创作中心

基于HTML+CSS实现的可交互照片墙Web页面

引用
CSDN
1.
https://blog.csdn.net/newlw/article/details/125129045

本文将详细介绍如何使用HTML、CSS和JavaScript实现一个可交互的照片墙Web页面。该照片墙支持点击照片查看大图、添加、删除和替换照片等功能,并且具有良好的过渡效果和响应式设计。

一、实验目的

本次实验的目的是练习HTML+CSS的布局与样式,以及简单的交互功能。

二、实验内容

制作一个可交互的照片墙,照片墙可以点击照片查看大图,并支持添加、删除和替换照片等功能。

三、实验步骤

1. 确定需求

照片墙是一个可以将照片按照一定的顺序排列的Web页面,基本要求是照片要合理地排布在页面上,且照片的尺寸要合适,布局要整齐。点击照片,可以在当前页面上方显示一个新的图层,其中显示这张照片的更大尺寸的图片。点击图层的其他位置可以隐藏该图层。可以向照片墙中添加照片,可以删除照片墙中的照片,可以替换照片墙的照片。页面要具有很好的过渡效果,且满足响应式设计,适应不同尺寸的设备。

2. 设计页面原型

根据需求,设计界面原型。上方居中显示标题和作者,主题部分为网格化布局照片,使用空白作为网格线。在正常计算机浏览器上每行显示4张图片,默认初始有12张图片。在平板电脑(宽度小于1024px大于690px)浏览器上每行显示3张图片。在手机(宽度小于690px)浏览器上每行显示两张图片。且在页面右下位置有一个固定不动的添加图片按钮。底端显示提示信息。大图页面为灰色蒙层,蒙层上为一张图片。在蒙层右下位置有一个删除按钮和一个替换按钮。

3. 实现布局

编写index.htmlindex.css

关键技术:

  • 主页面

  • Outside_block中为页面主题部分,其中title_block为标题,有两个标题标签组成,photo_block是图片,由12张初始组成,bottom_block为底端提示,由两个文字标签组成。

  • 其中图片布局采用flex布局,具体样式为:

  • 对于容器整体,采用多余元素换行显示,水平、竖直以及每行行内竖直均为居中。

  • 对于容器内的图片元素,采用百分比宽度20%设置图片宽度,同时确保每行显示4个图片。

  • 加号按钮

  • outside_block外设置一个div作为新增图片的按钮,其中放置一个加号的图片。此外还需要添加一个隐藏的组件,用于触发选择文件。因为div无法单纯通过点击事件调用选择文件的接口,因此将它的点击事件绑定到可以调用选择文件事件的input上。

  • 具体样式为:

  • display:noneinput隐藏。

  • 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

四、实验结果

以下是实验结果的界面效果:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号
基于HTML+CSS实现的可交互照片墙Web页面