pointer-events

by miSunLaughing

HTML

<!-- 展示区 -->
<div class="content">
  <div class="tips">
    <p>tips</p>
  </div>
</div>

<!-- 操作区 -->
<div id="action">
  <p class="action-info" id="auto">
    tips的鼠标事件属性默认为<span class="info">piinter-events:auto</span><br> 鼠标在白色虚线框中移动,观察效果,当鼠标移出(向右下方移动)白色虚线框的时候,tips还存在,这是因为tips触发了鼠标事件,冒泡到白色虚线框上,触发了白色虚框的鼠标操作事件
  </p>
  <p class="action-info" style="display:none" id="none">
    tips的鼠标事件属性更改为<span class="info">piinter-events:none</span><br> 鼠标在白色虚线框中移动,观察效果,当鼠标移出(向右下方移动)白色虚线框的时候,tips不存在,这是因为tips不能触发鼠标事件,白色虚框的鼠标事件正常触发。
  </p>
  <button class="action-change">切换为:<span>none</span></button>
</div>

CSS

html,
body {
  height: 100%;
  width: 100%
}

body {
  background: #20262E;
  padding: 20px;
  font-family: Helvetica;
}

.content {
  width: 50%;
  height: 50%;
  border: 1px dashed #fff;
  cursor: pointer;
}

.tips {
  display: none;
  position: absolute;
  left: 0;
  top: 0;
  background: #fff;
  border-radius: 4px;
  padding: 20px;
  font-size: 25px;
  text-align: center;
  transition: all 0.2s;
  margin: 0 auto;
  width: 300px;
}

.action-change {
  border-radius: 5px;
}

.action-info .info {
  margin: 0 5px;
  color: #fff;
}

.action-change:hover {
  background-color: #666;
}

JavaScript

// 添加鼠标移动事件
var $tips = $('.tips')
$('.content')
  .mouseover(function() {
    $tips.show();
  })
  .mousemove(function(e) {
    $tips.css({
      left: e.pageX,
      top: e.pageY
    })
  })
  .mouseout(function() {
    $tips.hide();
  })

$('button').on('click', function() {
  if ($(this).find('span').text() == 'none') {
    $tips.css({
      'pointer-events': 'none'
    })
    $(this).find('span').text('auto')
    $('#auto').hide()
    $('#none').show()
  } else {
    $tips.css({
      'pointer-events': 'auto'
    })
    $(this).find('span').text('none')
    $('#auto').show()
    $('#none').hide()
  }
})