9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

javascriptでクリックやタップの長押し処理をする方法

Last updated at Posted at 2022-01-13

はじめに

散々出尽くされていると思いますが備忘録として残しておきます。極力シンプルな方法かつPCとスマホ両対応のつもりです。

実装例

クリック押しっぱなしで数値が加算され続けます。

See the Pen Untitled by rahhi555 (@rahhi555) on CodePen.

コード解説

html

<p id="target">0</p>

<!--
touch-action: none; スマホでタップしたままスワイプするとpointerupイベントが発生しない現象の防止
user-select: none; 及び oncontextmenu="return false;" 長押し時のポップアップ停止
-->

<button
        id="btn" 
        style="touch-action: none; user-select: none;"
        oncontextmenu="return false;">
  クリック
</button>

javascript

/**
* 押下時にインクリメントし続ける処理を登録し、解放時に登録した処理を削除する 
*/
document.getElementById('btn').addEventListener('pointerdown', () => {
  const intervalId = setInterval(increment, 50)

  // document要素にイベント登録することで、クリックした後ボタンから動かしてもOK
  // once: true を指定して一度発火したらイベントを削除する
  document.addEventListener('pointerup', () => {        
    clearInterval(intervalId)
  }, { once: true })
})


const increment = () => {
// インクリメント処理は記事の趣旨と関係ないので省略

あとがき

スマホの動作はchrome dev toolsで確認しただけなので、実機だと不具合があるかもしれません。

9
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?