 <p>You can bind mousedown\mouseup events to <code>document</code>and mouseenter event on canvas.</p> <p>I'd suggest to use capturing phase instead (which jQuery doesn't support) to avoid any propagation event stopped in some way.</p> <p>See an example:</p> <p><div class="snippet" data-lang="js" data-hide="false"> <div class="snippet-code"> <pre class="snippet-code-js lang-js prettyprint-override"><code> document.addEventListener('mousedown', function(e) { $(this).data('mouseHold', e.which); }, true); document.addEventListener('mouseup', function(e) { $(this).data('mouseHold', false); }, true); $('canvas').on('mouseenter', function() { if ($(document).data('mouseHold')) { console.log('holding mouse button ' + $(document).data('mouseHold')); } });</code></pre> <pre class="snippet-code-css lang-css prettyprint-override"><code>canvas { background: blue; }</code></pre> <pre class="snippet-code-html lang-html prettyprint-override"><code>&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"&gt;&lt;/script&gt; &lt;canvas&gt;&lt;/canvas&gt;</code></pre> </div> </div> </p>