html图片上传预览

在HTML中,我们可以使用<img>标签来插入图片,仅仅使用<img>标签并不能实现图片预览功能,要实现图片预览功能,我们需要结合JavaScript和CSS,本文将详细介绍如何在HTML中实现图片预览功能,并提供相关问题与解答。

html图片上传预览

HTML部分

1、使用<img>标签插入图片

2、为图片添加一个类名或ID,以便后续使用JavaScript进行操作

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>图片预览</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <img src="example.jpg" alt="示例图片" class="preview-image">
    <div class="preview-overlay"></div>
    <div class="preview-container">
        <img src="" alt="" id="preview-image">
    </div>
    <script src="scripts.js"></script>
</body>
</html>

CSS部分(styles.css)

1、为.preview-image设置样式,使其显示原图大小的圆形占位符

2、为.preview-overlay设置样式,使其覆盖在原图上,形成半透明的遮罩层

3、为.preview-container设置样式,使其包含预览图片和遮罩层

4、为.preview-container img设置样式,使其自适应容器大小

5、为.preview-overlay设置样式,使其半透明且不可见时不占用空间

6、为.preview-overlay:hover设置样式,使其变为全透明,显示预览图片

.preview-image {
    width: 100%;
    height: auto;
}
.preview-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: 999;
    background-color: rgba(0, 0, 0, 0.5);
}
.preview-container {
    position: relative;
    z-index: 1000;
}
.preview-container img {
    max-width: 100%;
    max-height: calc(100% + 50px); /* 加上遮罩层的高度 */
}
.preview-overlay:hover,
.preview-container:hover img {
    opacity: 1; /* 当鼠标悬停在遮罩层或预览图片上时,显示原图 */
}

JavaScript部分(scripts.js)

1、为.preview-image元素添加点击事件监听器,当点击图片时触发预览功能

2、在预览功能中,获取点击的图片URL,并将其设置为.preview-container imgsrc属性值,同时显示遮罩层和预览图片框体

3、当鼠标离开图片或遮罩层时,隐藏预览图片框体和遮罩层,恢复原图显示状态

const previewImage = document.querySelector('.preview-image'); // 通过类名获取原图元素
const previewContainer = document.querySelector('.preview-container'); // 通过ID获取预览框体元素
const overlay = document.querySelector('.preview-overlay'); // 通过类名获取遮罩层元素
const imageSrc = previewImage.getAttribute('src'); // 获取原图URL
const previewSrc = ${imageSrc}?x-oss-process=image/resize,m_fill,h_160,w_160; // 对原图进行缩放处理,以适应预览框体的大小(可根据实际需求调整)
const previewImg = previewContainer.querySelector('img'); // 通过ID获取预览图片元素
const currentPreviewSrc = previewImg.getAttribute('src'); // 获取当前预览图片的URL(如果有的话)
if (currentPreviewSrc !== previewSrc) { // 如果当前URL与目标URL不同,则进行预览切换操作(避免重复切换)
  previewImg.setAttribute('src', previewSrc); // 将目标URL设置为预览图片的src属性值(替换掉原图)
} else if (currentPreviewSrc === previewSrc && overlay.style.opacity !== '1') { // 如果当前URL与目标URL相同且遮罩层未显示,则直接显示原图(无需切换)和遮罩层(确保其可见)
  overlay.style.opacity = '1'; // 将遮罩层的透明度设置为1(完全不透明)并显示出来(确保其可见)
} else if (currentPreviewSrc === previewSrc && overlay.style.opacity === '1') { // 如果当前URL与目标URL相同且遮罩层已显示,则直接隐藏遮罩层(确保其不可见)并恢复原图显示状态(无需切换)
  overlay.style.opacity = '0'; // 将遮罩层的透明度设置为0(完全透明)并隐藏起来(确保其不可见)
} else if (currentPreviewSrc !== previewSrc) { // 如果当前URL与目标URL不同且遮罩层已显示,则先隐藏遮罩层(确保其不可见),然后进行预览切换操作(避免重复切换)并重新显示遮罩层(确保其可见)
  overlay.style.opacity = '0'; // 将遮罩层的透明度设置为0(完全透明)并隐藏起来(确保其不可见)
} else if (currentPreviewSrc !== previewSrc) { // 如果当前URL与目标URL不同且遮罩层未显示,则直接进行预览切换操作(避免重复切换)并显示遮罩层(确保其可见)
  const newImageSrc = ${imageSrc}?x-oss-process=image/resize,m_fill,h_288,w_288; // 对原图进行缩放处理,以适应预览框体的大小(可根据实际需求调整)并生成新的URL(用于切换时的新图)和新的目标URL(用于切换时的旧图)
  previewImg.setAttribute('src', newImageSrc); // 将新的目标URL设置为预览图片的src属性值(替换掉原图)并更新当前预览图片的URL(用于切换时的旧图)为新的目标URL(用于切换时的旧图)和新的目标URL(用于切换时的旧图)(这样可以保证每次切换都是从旧图到新图的过程)
} else if (currentPreviewSrc !== previewSrc && currentPreviewSrc !== undefined && currentPreviewSrc !== null && overlay.style.opacity === '1') { // 如果当前URL与目标URL相同且遮罩层已显示且当前URL不为空且当前URL不为null且当前URL不为undefined(这是为了防止因为某些原因导致currentPreviewSrc被赋值为undefined或null而引发的问题),则直接隐藏遮罩层并恢复原图显示状态即可(无需切换)

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/211198.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-01-11 07:43
Next 2024-01-11 07:46

相关推荐

  • html页面怎么实时显示上传的图片

    HTML页面怎么实时显示上传的图片在HTML页面中,我们可以使用&lt;img&gt;标签来显示图片,当我们需要实时显示上传的图片时,我们需要使用JavaScript和AJAX技术,下面是一个简单的示例:1、我们需要创建一个HTML文件,包含一个表单用于上传图片和一个&lt;img&gt;标签用于显示图……

    2024-01-03
    0176
  • php获取本站域名

    什么是主域名?在互联网中,域名是用于标识网站地址的字符串,一个网站可能有多个子域名,但通常只有一个主域名,主域名是网站的主要域名,通常是用户在浏览器中输入的网址的前缀,www.example.com 的主域名是 example.com,主域名可以帮助用户更容易地记住和找到网站,同时也有助于搜索引擎优化(SEO)。如何使用PHP获取当前……

    2024-01-30
    0225
  • java window.open

    Java中的window.open用于在新窗口或标签页中打开指定的URL。

    2024-01-24
    0129
  • eclipse中httpservlet报错如何解决

    在Eclipse中,如果遇到HttpServlet报错,可以尝试以下方法解决:,,1. 检查项目依赖是否正确添加。,2. 确保servlet-api库已添加到项目中。,3. 检查servlet类是否继承了HttpServlet类。,4. 检查servlet类的@WebServlet注解是否正确配置。

    2024-01-19
    088
  • 树形菜单js

    一、什么是树形菜单?树形菜单是一种网站导航结构,它以树状形式展示菜单项,使得用户可以清晰地看到各个菜单项之间的关系,树形菜单通常用于组织复杂的信息结构,如企业网站的导航栏、CMS系统的分类目录等,在Django中,我们可以通过递归的方式实现树形菜单的展示。二、如何在Django中实现树形菜单?1. 定义数据模型我们需要在Django的……

    2023-11-25
    0145
  • html中location的用法详解

    HTML的location.assign()方法用于将当前文档重定向到一个新的URL,这个方法可以用于实现页面跳转、表单提交后的自动跳转等功能。技术介绍location.assign()是JavaScript中的一个方法,它属于Location对象。Location对象表示一个URL,可以用来获取或设置当前文档的URL。locatio……

    2024-01-09
    0256

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入