私はこのコードを持っています:
<template>
<div class="chart"
v-bind:style="chartStyleObject"
v-on:mousedown.left="initHandleMousedown($event)"
v-on:mouseup.left="initHandleMouseup()"
v-on:mouseout="initHandleMouseup()">
<div class="chartContent">
</div>
<!-- <div class="chartContent"> end -->
</div>
<!-- <div class="chart"> end -->
</template>
<script>
import axios from 'axios';
export default{
created () {
},
data () {
return {
ticket: null,
chartStyleObject: {
width: '500px',
widthWrapper: '1600px',
heightWrapper: '500px',
height: '247px',
marginTop: '15px',
marginRight: '0px',
marginBottom: '0px',
marginLeft: '15px',
},
XCoord: null,
YCoord: null,
}
},
methods: {
initHandleMousedown(event) {
this.startMousedownXCoord = event.clientX;
this.startMousedownYCoord = event.clientY;
this.XCoord = event.clientX;
this.YCoord = event.clientY;
console.log('XCoord', this.XCoord);
console.log('YCoord', this.YCoord);
window.addEventListener('mousemove', this.initHandleMouseMove);
},
initHandleMouseMove(event) {
this.XCoord = event.clientX;
this.YCoord = event.clientY;
console.log('XCoord', this.XCoord);
console.log('YCoord', this.YCoord);
},
initHandleMouseup() {
window.removeEventListener('mousemove', this.initHandleMouseMove);
},
},
}
</script>
<style scoped>
.chart{
position: relative;
border-radius: 10px;
padding: 27px 10px 10px 10px;
background-color: #45788b;
box-sizing: border-box;
cursor: move;
}
.chart .chartContent{
position: relative;
top: 0;
left: 0;
height: 100%;
width: 100%;
margin: 0 0 0 0;
background-color: #2f2c8b;
}
</style>
HTML design consists of 2 blocks:
(parent and child)
The event is tied to the parent tag `<div class =" chart ">`
Also, the parent block has padding on all 4 sides:
親ブロックをクリックし、パディングスペースに影響を与えずにマウスでドライブ(ボタンを押したまま)すると、mousemoveイベントが問題なく発生します。ただし、マウスカーソルがパディング領域に触れるとすぐに、イベントは機能しなくなります。
パディングをクリックすると、イベントも正しく機能しますが、パディングの外側のブロックスペース(内部スペース)にマウスカーソルを移動すると、イベントは機能しなくなります
質問:
なぜこれが発生するのですか?この動作はjs + nuxtでは正常ですか? .js?
ページのさまざまな領域の説明を正確に追うことはできませんが、あなたが見ていると思うものを説明することはできます。
これの鍵は、mouseout
リスナーを削除するmousemove
リスナーがあることです。mouseout
それも場合に発生することを意味イベントが伝播する、mouseout
子要素に発生しました。mouseleave
イベントが要素自体で発生した場合にのみ発生するコントラスト。
以下の例mouseout
は、マウスカーソルがルート要素から離れていなくてもリスナーがどのように起動するかを示しています。カーソルを子の外側に移動するだけで十分です。
document.getElementById('outer').addEventListener('mouseout', () => {
document.getElementById('out').innerHTML += 'mouseout\n'
})
div {
border: 1px solid;
display: inline-block;
padding: 20px;
}
<div id="outer">
<div></div>
</div>
<pre id="out"></pre>
イベントが機能しなくなるのを観察すると、実際に起こっていることは、mouseout
イベントが起こっていることであり、それがmousemove
リスナーを削除していることだと思います。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加