当前位置: 首页 > news >正文

图片点击放大,你的网页也能做到!

我经常在博客中插入大图,然而总需要借助浏览器的滚轮缩放功能放大观看实在是不方便。于是我希望做一个点击即放大的功能。


下面就是一张可点击放大的图片,你可以点击试试!当然,我期望的效果是自动对所有博客中的图片生效。

在这里插入图片描述
▲ Fluent Design App Header

本文内容

    • 创建一个用于放图片的 HTML 节点
    • 为图片的 HTML 节点添加 CSS 样式
    • 添加放大图片的 JS 脚本
    • 专为 Jekyll 设计的简化版本

创建一个用于放图片的 HTML 节点

如果你是普通的 HTML 网页,可以将下面的片段放入到你的页面中。

<div id="image-cover-modal" class="image-cover-modal">
  <img id="image-cover-image" class="image-cover-modal-content">
  <div id="image-cover-caption"></div>
</div>

最外层是容器,里面包含一个关闭按钮,一张图片和一个图片标题。

为图片的 HTML 节点添加 CSS 样式

.image-cover-modal {
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    position: fixed;
    z-index: 30;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    overflow: auto;
    background-color: rgb(0,0,0);
    background-color: rgba(0,0,0,0.9);
    transition: opacity ease 0.3s;
    pointer-events: none;
}

.model-shown {
    pointer-events: all;
    opacity: 1;
}

.image-cover-modal-content {
    display: block;
    max-width: 80%;
    max-height: 80%;
}

#image-cover-caption {
    display: block;
    position: absolute;
    width: 100%;
    height: 3rem;
    bottom: 0;
    line-height: 3rem;
    text-align: center;
    color: #fff;
    background: rgba(255, 255, 255, 0.33);
}

@media only screen and (max-width: 45rem){
    .image-cover-modal-content {
        max-width: 100%;
        max-height: 100%;
    }
}

添加放大图片的 JS 脚本

// Get the DOM
var modal = document.getElementById('image-cover-modal');
var modalImg = document.getElementById("image-cover-image");
var captionText = document.getElementById("image-cover-caption");
var span = document.getElementsByClassName("image-cover-close")[0];

// When the user clicks on <span> (x), close the modal
modal.onclick = function() {
    this.classList.remove("model-shown");
}

var i;
for (i = 0; i < document.images.length; i++) {

    // Get the image and insert it inside the modal - use its "alt" text as a caption
    var img = document.images[i];

    img.onclick = function(){
        modal.classList.add("model-shown");
        modalImg.src = this.src;
        captionText.innerHTML = this.alt;
    }
}

专为 Jekyll 设计的简化版本

如果你使用 Jekyll 搭建静态网页,那么只需要修改 3 个地方:

  • 在 main.css 中添加前面的 css 片段。
  • 在你想要添加放大图片的页面布局(例如 post.html)中添加 {% raw %}{% include clickable-image.html %}{% endraw %}。
  • 在 _includes 文件夹中添加一个 clickable-image.html 文件,存放以下内容。
<div id="image-cover-modal" class="image-cover-modal">
  <img id="image-cover-image" class="image-cover-modal-content">
  <div id="image-cover-caption"></div>
</div>
<script>
// Get the DOM
var modal = document.getElementById('image-cover-modal');
var modalImg = document.getElementById("image-cover-image");
var captionText = document.getElementById("image-cover-caption");
var span = document.getElementsByClassName("image-cover-close")[0];

// When the user clicks on <span> (x), close the modal
modal.onclick = function() {
    this.classList.remove("model-shown");
}

var i;
for (i = 0; i < document.images.length; i++) {

    // Get the image and insert it inside the modal - use its "alt" text as a caption
    var img = document.images[i];

    img.onclick = function(){
        modal.classList.add("model-shown");
        modalImg.src = this.src;
        captionText.innerHTML = this.alt;
    }
}
</script>

你可以参考我的文件:

  • /_includes/clickable-image.html
  • /_layouts/post.html
  • /assets/css/main.css at master · walterlv/walterlv.github.io

参考资料

  • How To Create Modal Images

我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • UWP 应用中 CoreApplication / Application, CoreWindow / Window 之间的区别
  • 使用 C# 代码创建快捷方式文件
  • 发布了一款库(或工具包),如何持续地编写更新日志(ChangeLog)?
  • Windows 无法删除文件夹 —— 访问被拒绝 / 因为目录不是空的
  • 如何精准地用打印机在贺卡或邀请函上打字
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • 使用 Postman 调试 ASP.NET Core 开发的 API
  • 只有你能 new 出来!.NET 隐藏构造函数的 n 种方法(Builder Pattern / 构造器模式)
  • UWP 中的各种文件路径(用户、缓存、漫游、安装……)
  • 使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(解析篇)
  • 使用并解析 OPML 格式的订阅列表来转移自己的 RSS 订阅(概念篇)
  • csproj 文件中那个空的 NuGetPackageImportStamp 是干什么的?
  • C#/.NET 中 Thread.Sleep(0), Task.Delay(0), Thread.Yield(), Task.Yield() 不同的执行效果和用法建议
  • WPF 中那些可跨线程访问的 DispatcherObject(WPF Free Threaded Dispatcher Object)
  • 在 Visual Studio Code 中为代码片段(Code Snippets)添加快捷键
  • 《深入 React 技术栈》
  • CSS相对定位
  • IP路由与转发
  • Java 多线程编程之:notify 和 wait 用法
  • LeetCode算法系列_0891_子序列宽度之和
  • Nodejs和JavaWeb协助开发
  • pdf文件如何在线转换为jpg图片
  • sessionStorage和localStorage
  • Tornado学习笔记(1)
  • Vue 重置组件到初始状态
  • vue数据传递--我有特殊的实现技巧
  • yii2权限控制rbac之rule详细讲解
  • Zepto.js源码学习之二
  • 设计模式走一遍---观察者模式
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 思考 CSS 架构
  • 微信开放平台全网发布【失败】的几点排查方法
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 一份游戏开发学习路线
  • 用Python写一份独特的元宵节祝福
  • 正则与JS中的正则
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #etcd#安装时出错
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • ( 10 )MySQL中的外键
  • (3)nginx 配置(nginx.conf)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (九)One-Wire总线-DS18B20
  • (算法)Travel Information Center
  • (一)u-boot-nand.bin的下载
  • (转)重识new
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .Net 高效开发之不可错过的实用工具
  • .net反编译的九款神器
  • .NET关于 跳过SSL中遇到的问题
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境