图片预览(原生js实现)

news/2024/11/8 15:34:01/

功能描述

很多网站都是使用浏览器自带图片浏览功能,但看起来很low,想手动实现图片预览功能,点击图片弹出大图预览框在屏幕中间显示,根据图片宽高自适应屏幕大小

效果图

效果图

具体代码实现

页面preview.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>preview</title><!-- 加载css样式 --><link rel="stylesheet" href="../css/preview.css"></head>
<body><!-- 图片列表 --><div><a href="javascript:;" onclick="showPreviewImg('../images/t1.jpg')"><img src="../images/t1.jpg" alt="" width="100px" height="100px"></a><a href="javascript:;" onclick="showPreviewImg('../images/t2.jpg')"><img src="../images/t2.jpg" alt="" width="100px" height="100px"></a><a href="javascript:;" onclick="showPreviewImg('../images/t3.jpg')"><img src="../images/t3.jpg" alt="" width="100px" height="100px"></a></div><!-- 预览图 --><div class="preview-img"><div class="container"><!-- 显示的大图 --><img src="../images/preview_default.png" alt=""><!-- 关闭按钮 --><a class="close" href="javascript:void(0);"></a></div></div><!-- 引入js --><script src="../js/preview.js"></script>
</body>
</html>

样式preview.css

/* 预览图 */
.preview-img {display: none;text-align: center;width: 100%;height: 100%;position: fixed;left: 0;top: 0;z-index: 100;background: url("../images/fancybox_overlay.png");
}/* 容器 */
.preview-img .container {max-width: 90%;position: absolute;padding: 15px;background-color: #f9f9f9;border-radius: 5px;
}/* 大图显示 */
.preview-img .container img {max-width: 100%;background-size: contain/cover;
}/* 关闭按钮 */
.preview-img .container a {display: inline-block;width: 36px;height: 36px;text-decoration: none;position: absolute;right: -18px;top: -18px;background: url("../images/fancybox_sprite.png") no-repeat;
}

preview.js

var mBody = document.querySelector("body");// 获取body
var previewImg = document.querySelector(".preview-img");// 获取预览图
var mContainer = document.querySelector(".preview-img .container");// 获取预览图显示区域
var mImg = document.querySelector(".preview-img .container img");// 获取显示图片
var mClose = document.querySelector(".preview-img .container .close");// 获取关闭按钮// 显示预览图
function showPreviewImg(url) {// 设置图片路径mImg.setAttribute("src", url);// 设置为弹性布局previewImg.style.display = "flex";previewImg.style.justifyContent = "center";previewImg.style.alignItems = "center";// 设置预览图大小setPreviewImgWH();// 当弹出预览图时下面不允许滚动mBody.style.overflow = "hidden"
}// 设置预览图大小
function setPreviewImgWH() {// 获取当前窗口宽度let windowWidth = window.innerWidth;// 获取当前窗口高度let windowHeight = window.innerHeight;// 判断当宽度小于高度时,使用宽度if (windowWidth < windowHeight) {// 设置图片宽高mImg.style.width = windowWidth * 0.8 + "px";mImg.style.height = "auto";} else {// 设置图片宽高mImg.style.height = windowHeight * 0.8 + "px";mImg.style.width = "auto";}
}// 关闭按钮点击事件
mClose.onclick = function () {closePreviewImg();
}// 预览图上点击事件取消冒泡
mContainer.onclick = function (event) {event.stopPropagation();
}// 点击预览图之外的地方 关闭预览图
previewImg.onclick = function (event) {closePreviewImg();
}// 关闭预览图
function closePreviewImg() {previewImg.style.display = "none";mBody.style.overflow = "scroll"
}// 屏幕尺寸改变事件
window.onresize = function () {// 判断只有预览图显示的时候才设置大小if (previewImg.style.display != "none") {// 设置预览图大小setPreviewImgWH();}
};

具体实现细节代码已注释,想要使用的只需修改一下图片地址即可,注意css和js的路径地址
我的目录结构
目录结构


http://www.ppmy.cn/news/769010.html

相关文章

[Android] 通过Menu实现图片怀旧、浮雕、模糊、光照和素描效果

由于随手拍项目想做成类似于美图秀秀那种底部有一排Menu实现不同效果的功能,这里先简单介绍如何通过Menu实现打开相册中的图片、怀旧效果、浮雕效果、光照效果和素描效果.后面可能会讲述如何通过PopupWindow实现自定义的Menu效果. 希望文章对大家有所帮助,如果有错误或不足…

安卓端调用相机拍照返回并预览---清晰原图

安卓端调用相机拍照并返回预览图片 一、demo预览二、xml代码和activity简单代码描述。三、老规矩再来写几个转换工具方法 继之前写的安卓调用相机拍照返回预览&#xff0c;如果对于画质要求不高的话可以考虑之前的写的那篇&#xff0c;返回的是一个压缩后的bitmap &#xff0c;…

JavaScript进阶(八)JS实现图片预览并导入服务器功能

赠人玫瑰&#xff0c;手留余香。若您感觉此篇博文对您有用&#xff0c;请花费2秒时间点个赞&#xff0c;您的鼓励是我不断前进的动力&#xff0c;共勉&#xff01; 项目开发过程中&#xff0c;需要实现文件上传功能。借此机会学习之。 使用HTML中现有的input type “file”可以…

android图片特效处理之模糊效果

这篇将讲到图片特效处理的模糊效果。跟前面一样是对像素点进行处理&#xff0c;算法是通用的&#xff0c;但耗时会更长&#xff0c;至于为什么&#xff0c;看了下面的代码你就会明白。 算法&#xff1a; 一、简单算法&#xff1a;将像素点周围八个点包括自身一共九个点的RGB值…

解决H5调用安卓相机实现拍照并上传

最近在开发中遇到一个问题&#xff0c;要在APP内嵌的H5页面中实现拍照录像并上传到后端服务器。 刚开始我直接想到&#xff1a; <input type"file" accept"image/*" capture"camera"> 由于项目用vant UI&#xff0c;于是用了Uploader文…

mui 原生jsH5预览图片

mui 原生jsH5预览图片 下载mui.min.css&#xff0c;mui.js&#xff0c;mui.zoom.js&#xff0c;mui.imageViewer.js&#xff0c;mui.previewimage.js&#xff0c;app.js <link rel"stylesheet" href"./css/mui.min.css"> <script src"./js/…

html实现调取手机相机进行拍照上传——技能提升

今天同事问我一个我之前参与的项目&#xff0c;由于之前只做了样式&#xff0c;并没有书写功能&#xff0c;因此同事接手后需要做一个html实现手机拍照上传的功能&#xff1a; 由于项目是一个后台管理系统&#xff0c;使用的是vueant-design的框架&#xff0c;因此上传图片就是…

MUI 实现手机图片上传

由于公司自主研发APP&#xff0c;使用的是MUI框架。我做了其中头像图片上传的功能&#xff0c;在此分享下demo&#xff1b; 如有不规范处&#xff0c;请多多指教&#xff0c;互相学习。 第一次接触这个框架&#xff0c;踩了许多的坑 >_< 步骤&#xff1a;点击选择图片 →…