viewerjs 打开时页面抖动

Last Modified: 2023/11/19

问题描述

viewerjs 在图片预览弹框打开和关闭时页面会抖动一下,这是什么原因呢,该如何修复?

原因

在说明原因之前,先说明我使用的版本为 1.11.6,已经是相当新的版本。

viewerjs 在图片预览弹框打开和关闭时页面之所以会抖动是因为 open 时会给 body 加一个 padding-right,这个 padding-right 正好是滚动条的宽度,至于为什么作者会给 body 元素加一个 padding-right 无从知晓。导致页面抖动的相关代码如下:

open: function open() {
  var body = this.body;
  addClass(body, CLASS_OPEN);
  if (this.scrollbarWidth > 0) {
    body.style.paddingRight = "".concat(this.scrollbarWidth + (parseFloat(this.initialBodyComputedPaddingRight) || 0), "px");
  }
},
close: function close() {
  var body = this.body;
  removeClass(body, CLASS_OPEN);
  if (this.scrollbarWidth > 0) {
    body.style.paddingRight = this.initialBodyPaddingRight;
  }
}

修复方法

这个抖动问题由来已久,早在 2018,就有人提出 issue。在评论区有人提出了解决方案。由于是 open 方法增加了 padding-right,close 方法恢复 padding-right,因此只需要把这两个方法覆盖即可。

let viewer = new Viewer(document.querySelector("#image"), {} });
//here
viewer.close = function(){}
viewer.open = function(){}
有问题吗?点此反馈!

温馨提示:反馈需要登录