<div class="container">
  <div id="zoom-div">
    a div
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.async.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.coincidence.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.binding.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/2.2.26/rx.time.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs-dom/2.0.7/rx.dom.js"></script>
.container div {
  background: burlywood;
  display: inline-block;
  width: 100px;
  height: 200px;
  border: 1px solid aquamarine;
  transform-origin: top left;
  transition: all 300ms linear;
}
let zoom = 1.0;
const dbclick = () => {
  if (zoom > 2.5) {
    return;
  }
  zoom = zoom + 0.1;
  document.getElementById("zoom-div").style["transform"] = `scale(${zoom})`;
};

const triclick = () => {
  if (zoom <= 0.5) {
    return;
  }
  zoom = zoom - 0.1;
  document.getElementById("zoom-div").style["transform"] = `scale(${zoom})`;
};

const zoomDiv = document.querySelector("#zoom-div");
const clickStream = Rx.Observable.fromEvent(zoomDiv, "click");
const multiClickStream = clickStream
  .buffer(() => clickStream.throttle(300))
  .map((list) => list.length)
  .filter((x) => x >= 2);

multiClickStream.subscribe((clickNums) => {
  if (clickNums === 2) {
    dbclick();
    console.log("双击");
  } else {
    triclick();
    console.log("三连");
  }
});

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.