【JS】封装针对dom节点的全屏查看功能

封装一个函数,可以使某个dom元素进入全屏模式

<body>
  <div id="container">
    <h2>这是一个h2</h2>
    <p>这是一个p</p>
    <button id="btn" onclick="">进入/退出全屏</button>
  </div>

  <script>
    btn.onclick = function () {
      // 全屏、关闭全屏
    }
  </script>
</body>

js

// 进入全屏
function enter(ele) {
  if (ele.requestFullScreen) {
    ele.requestFullScreen()
  } else if (ele.mozRequestFullScreen) {
    ele.mozRequestFullScreen()
  } else if (ele.webkitRequestFullScreen) {
    ele.webkitRequestFullScreen()
  } else if (ele.msRequestFullScreen) {
    ele.msRequestFullScreen()
  }
}
// 退出全屏
function exit() {
  if (document.exitFullScreen) {
    document.exitFullScreen()
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen()
  } else if (document.webkitCancelFullScreen) {
    document.webkitCancelFullScreen()
  } else if (document.msExitFullScreen) {
    document.msExitFullScreen()
  }
}
// 当前处于全屏的元素
function fullEle() {
  return (
    document.fullscreenElement ||
    document.mozFullScreenElement ||
    document.webkitFullscreenElement ||
    document.msFullscreenElement ||
    null
  )
}
// 当前是否处于全屏状态
function isFull() {
  return !!fullEle()
}

优化js:提取方法名,由于浏览器能使用什么方法在初次运行时就已经确定,所以无需额外判断

function getPropertyName(names, target) {
  return names.find((name) => name in target)
}

const enterFullScreenName = getPropertyName(
  [
    "requestFullscreen",
    "webkitRequestFullScreen",
    "mozRequestFullScreen",
    "msRequestFullScreen",
  ],
  document.documentElement
)
// 进入全屏
function enter(ele) {
  enterFullScreenName && ele[enterFullScreenName]()
}

const exitFullScreenName = getPropertyName(
  [
    "exitFullscreen",
    "webkitExitFullScreen",
    "mozCancelFullScreen",
    "msExitFullScreen",
  ],
  document
)
// 退出全屏
function exit() {
  exitFullScreenName && document[exitFullScreenName]()
}

const fullEleName = getPropertyName(
  ["fullscreenElement", "webkitFullscreenElement", "mozFullScreenElement"],
  document
)
// 当前处于全屏的元素
function fullEle() {
  return document[fullEleName] || null
}
// 当前是否处于全屏状态
function isFull() {
  return !!fullEle()
}

function toggle(ele) {
  isFull() ? exit() : enter(ele)
}

整体代码

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

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    #container {
      background-color: white;
    }
  </style>
</head>

<body>
  <div id="container">
    <h2>这是一个h2</h2>
    <p>这是一个p</p>
    <button id="btn" onclick="">进入/退出全屏</button>
  </div>
  <script>
    function getPropertyName(names, target) {
      return names.find((name) => name in target)
    }

    const enterFullScreenName = getPropertyName(
      [
        "requestFullscreen",
        "webkitRequestFullScreen",
        "mozRequestFullScreen",
        "msRequestFullScreen",
      ],
      document.documentElement
    )
    // 进入全屏
    function enter(ele) {
      enterFullScreenName && ele[enterFullScreenName]()
    }

    const exitFullScreenName = getPropertyName(
      [
        "exitFullscreen",
        "webkitExitFullScreen",
        "mozCancelFullScreen",
        "msExitFullScreen",
      ],
      document
    )
    // 退出全屏
    function exit() {
      exitFullScreenName && document[exitFullScreenName]()
    }

    const fullEleName = getPropertyName(
      ["fullscreenElement", "webkitFullscreenElement", "mozFullScreenElement"],
      document
    )
    // 当前处于全屏的元素
    function fullEle() {
      return document[fullEleName] || null
    }
    // 当前是否处于全屏状态
    function isFull() {
      return !!fullEle()
    }

    function toggle(ele) {
      isFull() ? exit() : enter(ele)
    }

    btn.onclick = function () {
      toggle(container)
    }
  </script>
</body>

</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

田本初

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值