首页 > 其他分享 >图片查看器(预览)

图片查看器(预览)

时间:2023-06-06 16:23:57浏览次数:41  
标签:src 预览 idx 查看器 subjects preview evt display 图片

效果

效果

实现

思路

  • 有一个父容器,里面两个子容器,两个子容器分别为图片列表容器和点击之后预览的容器;
  • 预览的容器需要一个遮罩层一个图片标签;点击某张图片时遮罩层才出来
  • 遮罩层左右会有切换的按钮(但是注意边界条件,第一张没有左箭头,最后一张没有右箭头);切换时就把当前图片的路径换成目标图片的路径;
  • 自定义一个事件,可以叫preview,监听这个事件来控制是否触发;
  • 图片路径换成自己的;

代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>图片查看器</title>
  <style>
    body {
      padding: 0;
      margin: 0;
      position: relative;
      height: 100vh;
    }

    ul {
      list-style: none;
      display: flex;
      flex-wrap: wrap;
      padding: 0;
      margin: 0px;
      height: 100%;
      width: 100%;
    }

    ul img {
      width: 100px;
    }

    #mask {
      height: 100%;
      width: 100%;
      background-color: rgba(1, 1, 1, 0.5);
      text-align: center;
      position: absolute;
      top: 0;
      left: 0;
      display: none;
    }

    .preview {
      display: block;
      /* display: inline-block; */
      color: white;
      font-size: 300%;
      position: absolute;
      top: 50vh;
      left: 0;
      float: left;

    }

    .next {
      display: block;
      /* display: inline-block; */
      color: white;
      font-size: 300%;
      position: absolute;
      top: 50vh;
      right: 0;
      float: right;
    }
  </style>
</head>

<body>
  <ul id="list">
    <li><img src="../../pictures/mmexport1649928066941.jpg" alt=""></li>
    <li><img src="../../pictures/mmexport1649927142313.jpg" alt=""></li>
    <li><img src="../../pictures/mmexport1649927128631.jpg" alt=""></li>
    <li><img src="../../pictures/mmexport1649927124536.jpg" alt=""></li>
    <li><img src="../../pictures/mmexport1649927131843.jpg" alt=""></li>
  </ul>
  <div id="mask">
    <span class="preview">
      < </span>
        <img src="" alt="" width="300px">
        <span class="next"> > </span>
  </div>
</body>
<script type="text/javascript">
  const imgList = document.getElementById('list');
  let imgs = document.querySelectorAll('ul img');
  function setPreviewBehavior(subjects) {
    let previewEvent = document.createEvent('Event');
    previewEvent.initEvent('preview', true, true);
    if (!Array.isArray(subjects)) {
      if (subjects.length) subjects = Array.from(subjects);
      else subjects = [subjects];
    }
    previewEvent.previewTarget = subjects.map(evt => {
      return evt.src;
    });
    subjects.forEach(subject => {
      subject.preview = function () {
        subject.dispatchEvent(previewEvent);
      }
    });
  }
  setPreviewBehavior(imgs);
  const previewMask = document.getElementById('mask');
  let previewImage = previewMask.querySelector('img');
  let previewPrevious = previewMask.querySelector('.preview');
  let previewNext = previewMask.querySelector('.next');
  previewMask.addEventListener('click', evt => {
    if (evt.target === previewMask) {
      evt.target.style.display = 'none';
    }
  });
  imgList.addEventListener('click', evt => {
    if (evt.target.preview) {
      evt.target.preview();
    }
  });
  imgList.addEventListener('preview', evt => {
    const src = evt.target.src,
      imgs = evt.previewTarget;
    previewMask.style.display = 'block';
    previewImage.src = src;
    let idx = imgs.indexOf(src);
    function updateButton(idx) {
      previewPrevious.style.display = idx ? 'block' : 'none';
      previewNext.style.display = idx < imgs.length - 1 ? 'block' : 'none';
    }
    updateButton(idx);
    previewPrevious.onclick = function (evt) {
      previewImage.src = imgs[--idx];
      updateButton(idx);
    };
    previewNext.onclick = function (evt) {
      previewImage.src = imgs[++idx];
      updateButton(idx);
    }
  })
</script>

</html>

标签:src,预览,idx,查看器,subjects,preview,evt,display,图片
From: https://www.cnblogs.com/rain111/p/17460868.html

相关文章

  • 昇腾实战丨DVPP媒体数据处理图片解码问题案例
    摘要:本期就分享几个关于DVPP图片解码问题的典型案例,并给出原因分析及解决方法。本文分享自华为云社区《DVPP媒体数据处理图片解码问题案例》,作者:昇腾CANN。DVPP(DigitalVisionPre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理硬加......
  • 昇腾实战丨DVPP媒体数据处理图片解码问题案例
    摘要:本期就分享几个关于DVPP图片解码问题的典型案例,并给出原因分析及解决方法。本文分享自华为云社区《DVPP媒体数据处理图片解码问题案例》,作者:昇腾CANN。DVPP(DigitalVisionPre-Processing)是昇腾AI处理器内置的图像处理单元,通过AscendCL媒体数据处理接口提供强大的媒体处理......
  • android应用启动的时候添加图片,并设置跳过按钮
    要在显示图片时添加跳过按钮,可以使用AndroidSDK提供的splashscreen资源文件,并在布局文件中使用。以下是添加跳过按钮的一般步骤:1.在AndroidManifest.xml文件中的应用程序标签中添加以下行:android:splashScreen="res/drawable/splash_screen.png"这将指定使用spla......
  • 直播平台搭建源码,调用系统相册实现多选图片上传
    直播平台搭建源码,调用系统相册实现多选图片上传1、首先需要给webview的WebChromeClient设置以下代码,才可以实现h5与Android交互选取图片 privateValueCallback<Uri>mValueCallbackUri;privateValueCallback<Uri[]>mValueCallbackUris;this.setWebChromeClient(newWebChro......
  • 【React工作记录八十七】React+antDesign实现上传图片功能(类组件)
    前言大家好我是歌谣今天继续给大家带来工作中实战部分的一些代码的封装和认识需求实现1可以支持上传最多九张图片2图片支持预览替换删除3支持自定义上传文件大小格式未上传提示实现效果子组件封装UploadImage组件*@Description:公共上传图片*@param{Array}type图片......
  • 如何将word图片粘贴到CKEditor里面
    ​ 1.编辑器修改(可选)1.1在 ueditor/config.json 中添加代码块    /* 上传word配置 */    "wordActionName":"wordupload",/* 执行上传视频的action名称 */    "wordFieldName":"upfile",/* 提交的视频表单名称 */    "wordPathFormat":"/p......
  • h5上传图片的两种方法
    上传方法一、ajax用formData对象上传介绍一下formData:FormData对象把数据编译成键值对的形式,用XMLHttpRequest来发送数据。注意:1.要将编码方式(enctype属性)设置成multipart/form-data2.不设置内容类型(contentType:false)3.不处理数据(processData:false)html代码:......
  • 如何将word图片粘贴到KindEditor里面
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......
  • excel 显示内容与预览内容不一样,字体换行
    普通预览(单元格内容发生换行) 处理方法:我们只需要关闭单元格自动换行指令即可 处理结果 ......
  • 如何将word图片粘贴到wangEditor里面
    ​ 如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......