H5的自定义事件(以storage为例)

storage事件对localStorage 和 sessionStorage都有效

简单使用方法

let myEvent = new Event('xxx',{options});   // 定义,options 见MDN
DOM.addEventListener('xxx',function(e){ ... })  // 监听
DOM.dispatchEvent(myEvent ) // 触发

注意: 自定义事件可以在任何DOM元素触发,包括document和window,但是触发和监听的对象必须是同一个DOM元素

image.png

以下是全部代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
<div id="app"></div>
  <script src="https://cdn.bootcss.com/vue/2.5.10/vue.min.js"></script>
  <script type="text/x-template" id="myEvent">
    <div>
      <span id="" ref="dispatch" @click="clickHandle" style="border:1px solid">触发look</span>
      <br>
      <br>
      <span @click="setStorage" style="border:1px solid">触发storage</span>
      <br>
      <br>
      <span id="onMyEvent" ref="onMyEvent" style="border:1px solid">接收</span>
    </div>
  </script>
  <script>
    new Vue({
      el: '#app',
      template: '#myEvent',
      created() {
        /* =========本页面监听sorage事件开始========== */
        // 创建自定义方法
        // 自定义事件可以在任何DOm元素触发,包括document和window,但是触发和监听的对象必须是同一个DOM元素
        var newSetItemEvent = new Event("setItemEvent");
        // 缓存原来的方法
        var orignalSetItem = localStorage.setItem;
        window.addEventListener("setItemEvent", function (e) {
          alert(e.newValue)
        })
        // 重写原来的方法并监听
        localStorage.setItem = function(key,newValue){
          newSetItemEvent.newValue = newValue
          window.dispatchEvent(newSetItemEvent)
          // 使用原来的方法将数据存进storage
          orignalSetItem.apply(this, arguments)
        }
        /* =========结束========== */
      },
      mounted() {
        this.$refs.onMyEvent.addEventListener('look', function (e){
          console.log('look事件接收到了---', e)
        })
      },
      methods: {
        clickHandle() {
          const myLook = new Event("look");
          myLook.newValue = "look----------"
          this.$refs.onMyEvent.dispatchEvent(myLook)
          // 自定义事件可以在任何DOm元素触发,包括document和window,但是触发和监听的对象必须是同一个DOM元素
        },
        setStorage() {
          localStorage.setItem("nm","1234");
          // sessionStorage.setItem("nm","1234");
        }
      }
    })
  </script>
</body>
</html>

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容