功能描述

很多网站都是使用浏览器自带图片浏览功能,但看起来很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的路径地址
我的目录结构

图片预览(原生js实现)相关推荐

  1. 原生js实现ajax的文件异步提交功能、图片预览功能.实例

    采用html5使得选择图片改变时,预览框中图片随之改变.input文件选择框美化.原生js完成文件异步提交 效果图: 代码如下,可直接复制并保存为html文件打开查看效果 <html> & ...

  2. 原生js之图片预览的封装

    图片预览 _this:input[file]对象 _thisNext:下一个要操作的dom对象 cb:回调函数 function changeImg(_this,_thisNext,cb){var r ...

  3. 浅谈js本地图片预览

    最近在工作中遇到一个问题,就是实现一个反馈页面,这个反馈页面的元素有反馈主题.反馈类型.反馈内容.反馈人联系电话以及反馈图片.前端将这些反馈的元素POST给后台提供的接口:实现这个工作的步骤就是:页面 ...

  4. 简单的实现图片预览, 通过原生ajax以及 jQuery两种方法实现图片预览,有更好的办法可以留言喔...................

    1.原生写ajax实现图片预览: 结构:       <input type="file"> <img src="" alt="&q ...

  5. 原生图片预览实现及由此引出的图片自适应宽高问题探索

    看到手机相册,突发奇想:能不能用实现一个原生的页面"相册"?或者说,传统网页中怎么实现图片预览功能? 如果在原生网页中使用插件,那必不可少的要引入一堆东西(并不是鄙视插件,只是为了 ...

  6. php 图片预览原理,JavaScript_纯JS实现的批量图片预览加载功能,1.实现原理直接见代码,需要一 - phpStudy...

    纯JS实现的批量图片预览加载功能 1.实现原理直接见代码,需要一张转圈的小图片,需要预览的所有图片默认的位置全是这张小图片,滚轮滚到原图需要出现的位置时候,预览加载替换小图片.实现效果 复制代码 代码 ...

  7. js实现移动端图片预览:手势缩放, 手势拖动,双击放大...

    原文:js实现移动端图片预览:手势缩放, 手势拖动,双击放大... 前言 本文将介绍如何通过js实现移动端图片预览,包括图片的 预览模式,手势缩放,手势拖动,双击放大等基本功能: 扫码查看示例效果: ...

  8. JS实现图片预览与等比缩放

    案例仅为图片预览功能,省略图片上传步骤,框架为easyui. HTML代码: @*text-align:center;水平居中 vertical-align: middle;display: tabl ...

  9. axios获取图片显示_Vue.js+axios图片预览以及上传显示进度

    在平时项目开发中,我们经常会对文件做一些上传操作,不仅仅要实现基本需求,也要兼顾用户体验,根据自己在工作中遇到的问题谈谈对图片上传的预览以及上传进度的优化. 1.搭建项目 基于Vue.js+axios ...

最新文章

  1. golang中的byte与rune
  2. java基础提升篇:深入浅出Java多线程
  3. Rancher的简单部署和使用
  4. .Net页面的生命周期(ZZ)
  5. IEC 6-1131/3的5种标准编程语言
  6. 油管螺纹尺寸对照表_yt15硬质合金刀片尺寸|A320焊接刀头参数
  7. java内部格式_详解java内部类的访问格式和规则
  8. 记一次Cassandra Java堆外内存排查经历
  9. php 转化js数组字符串,js数组怎么转为字符串
  10. Docker:unauthorized: incorrect username or password.
  11. 如何切底卸载Oracle
  12. 【渝粤教育】国家开放大学2018年春季 0032-21T农业经济学 参考试题
  13. pycharm主题、颜色、字体设置
  14. linux 桌面美化指南,Linux_9方面立体式地美化Ubuntu桌面,总结了一下桌面美化的设置。 - phpStudy...
  15. JS基础——图片切换的综合实例
  16. 背包问题之0-1背包算法详解
  17. 无主3局域网找不到服务器,无主之地3局域网模式设置方法攻略 无主之地3局域网怎么用...
  18. JAVA入门万字总结
  19. 照片尺寸是假像素对照表
  20. mysql 实数型变量定义,MySQL实数类型使用注意事项

热门文章

  1. 企业级技术与大数据BI——节选自专著《Big Data Fundamentals: Concepts, Drivers Techniques》
  2. 【图解版】B2C电商平台解决方案
  3. 你是如何转行的?转行容易吗? 1
  4. 使用串口转USB连接树莓派
  5. Codeforces Round #727 (Div. 2)_B. Love Song(前缀和)
  6. 微信公众平台版面设计需要服务器,公众号版面设计,微信公众号中排版怎么弄...
  7. 微信默认表情符号的代码对照表(微信公众号使用到)
  8. ios objective-c将base64位编码字符串转换成图片
  9. Golang中的runtime.Caller理解
  10. 简洁大气留白风格源码资源站 emlog模板