要素のドラッグ開始/ドロップ イベントを検出しようとしています。これらのイベントがトリガーされていないように見えることがあります。ソースはJSFiddleにあります。オレンジ色のバーでマウスを押したままドラッグして、間隔 (青色) を作成してみてください。Chrome で、これを 3 回実行してみてください。3 回目には、ほとんどの場合、mouseup イベントがトリガーされず、効果が奇妙になっていることに気付きます。マウスが押されていない場合でも、ドラッグ イベントは引き続きトリガーされます。
$ ->
isMouseDown = false
isDragging = false
$draggedInterval = undefined
$test = $("#test")
$test
# code related to attaching handlers to trigger custom events
.on "mousedown", ->
isMouseDown = true
.on "mouseup", (evt) ->
isMouseDown = false
if isDragging
$test.trigger("x-stopDrag", evt)
isDragging = false
else
$test.trigger("x-click", evt)
.on "mousemove", (evt) ->
console.log isMouseDown, isDragging
if isMouseDown && not isDragging
$test.trigger("x-startDrag", evt)
isDragging = true
if isDragging
$test.trigger("x-drag", evt)
.on "mouseleave", (evt) ->
isMouseDown = false
if isDragging
isDragging = false
$test.trigger("x-cancelDrag", evt)
# handlers for custom events
.on "x-startDrag", (x, evt) ->
console.log("started dragging")
$draggedInterval = $("<div>", {
class: "interval"
css:
left: evt.clientX
}).appendTo($test)
.on "x-stopDrag", (x, evt) ->
console.log("stopped dragging")
$draggedInterval = undefined
.on "x-cancelDrag", ->
console.log("canceled dragging")
$draggedInterval.remove()
$draggedInterval = undefined
.on "x-click", (x, evt) ->
console.log("click")
.on "x-drag", (x, evt) ->
console.log("drag")
$draggedInterval.css("width", evt.clientX - $draggedInterval.position().left)
Firefox および IE10 で動作するようです