Javascript event process

capture or bubbling

by xiaoluoboding

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.24/vue.min.js"></script>
<div id="app">
  <ul @click="callback($event)">
    <li @click="callback($event)">One</li>
    <ul @click="callback($event)">
      <li @click="callback($event)">Two</li>
      <ul @click="callback($event)">
        <li @click="callback($event)">Three. Click Me!!!</li>
      </ul>
    </ul>
  </ul>
</div>

CSS

* {
  box-sizing: border-box;
  margin: 0;
  padding: 20px;
  transition: background 800ms;
}

ul {
  height: 100%;
  list-style: none;
  background: hsl(193, 66%, 85%);
}

li {
  height: 100%;
  background: hsl(193, 66%, 95%);
}

.highlight {
  background: red;
}

JavaScript

var pause = 200;
new Vue({
  el: "#app",

  methods: {
    callback(event) {
      var ms = event.timeout = (event.timeout + pause) || 0;
      var target = event.currentTarget;

      console.log(target);

      setTimeout(function() {
        target.classList.add('highlight');
        setTimeout(function() {
          target.classList.remove('highlight');
        }, pause);
      }, ms);
    }
  }
})