Skip to content
文章目录

js禁止浏览器默认的缩放

禁止浏览器缩放

移动端

html
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />

IOS 新版本已经无法通过user-scalable=no来阻止浏览器缩放了

PC 端

ts
function evtCall(event: Event) {
  const keyboardEvt = event as KeyboardEvent
  // 禁止键盘快捷键+鼠标滚动对浏览器界面进行缩放
  if (keyboardEvt.ctrlKey === true || keyboardEvt.metaKey) {
    event.preventDefault()
  }
}
function keyCall(event: KeyboardEvent) {
  // 禁止通过纯键盘快捷键对浏览器界面进行缩放
  if ((event.ctrlKey === true || event.metaKey === true) && (event.key === '=' || event.key === '-')) {
    event.preventDefault()
  }
}
window.removeEventListener('keydown', keyCall)
window.removeEventListener('mousewheel', evtCall)
window.removeEventListener('DOMMouseScroll', evtCall)

window.addEventListener('keydown', keyCall, { passive: false })
window.addEventListener('mousewheel', evtCall, { passive: false })
//firefox
window.addEventListener('DOMMouseScroll', evtCall, { passive: false })

判断 pc 浏览器是否缩放

js
// 判断pc浏览器是否缩放,若返回100则为默认无缩放,如果大于100则是放大,否则缩小
function detectZoom() {
  var ratio = 0,
    screen = window.screen,
    ua = navigator.userAgent.toLowerCase()

  if (window.devicePixelRatio !== undefined) {
    ratio = window.devicePixelRatio
  } else if (~ua.indexOf('msie')) {
    if (screen.deviceXDPI && screen.logicalXDPI) {
      ratio = screen.deviceXDPI / screen.logicalXDPI
    }
  } else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
    ratio = window.outerWidth / window.innerWidth
  }

  if (ratio) {
    ratio = Math.round(ratio * 100)
  }

  return ratio
}

PC 端实现鼠标滚轮对图片的放大缩小

鼠标滚轮实现图片的放大缩小有个前提,必须先禁止浏览器默认的放大缩小

ts
let scale = 1
imgDom.onwheel = (e: WheelEvent) => {
  // @ts-ignore
  if (e.wheelDelta > 0) {
    scale += 0.05
  } else {
    scale -= 0.05
  }
  if (scale < 0.5) {
    scale = 0.5
  }
  imgDom.style.transform = `scale(${scale})`
}

参考资料

js 实现图片的放大缩小(鼠标长按拖拽、鼠标滚轮控制放大缩小)