ホームページ ウェブフロントエンド jsチュートリアル JavaScript モバイルデバイスのタッチイベントのカプセル化の例 Web 開発_JavaScript スキル

JavaScript モバイルデバイスのタッチイベントのカプセル化の例 Web 開発_JavaScript スキル

May 16, 2016 pm 04:46 PM
javascript タッチイベント ウェブ開発 モバイル機器

タッチ スクリーン デバイスでは、一部の基本ジェスチャにはタッチ イベントの二次カプセル化が必要です。
zepto はモバイル端末でよく使用されるクラス ライブラリですが、そのタッチ モジュールによってシミュレートされる一部のイベントには互換性の問題がいくつかあります。たとえば、タップ イベントには一部の Android デバイスでイベント侵入バグがあり、その他のタイプにも多かれ少なかれ問題があります。イベントにおける互換性の問題。

そこで、これらの一般的に使用されるジェスチャ イベントを自分でカプセル化しました。テストする実際のデバイスが少ないため、互換性の問題がいくつかある可能性があります。次のコードは iOS 7 と Andorid 4 のみに適用されます。テストはいくつかの共通でパスします。ブラウザ。

イベントをタップ

タップ イベントは PC ブラウザのクリック効果と同等ですが、クリック イベントはタッチ スクリーン デバイスでも利用できますが、多くのデバイスではクリックに多少の遅れが生じます。 click" イベントが必要です。これは、タッチ イベントの助けを借りて実現されます。

コードをコピーします コードは次のとおりです:

var startTx, startTy;

element.addEventListener( 'touchstart', function( e ){
var touch = e.touches[0];

startTx = touchs.clientX;
startTy = touch.clientY;
}, false );

element.addEventListener( 'touchend', function( e ){
var touch = e.changedTouches[0],
endTx = touch.clientX,
endTy = touch.clientY;

// 一部のデバイスでは、タッチ イベントの感度が高く、指を押したり離したりするとイベント座標がわずかに変化します。
if( Math.abs(startTx - endTx) < 6 && Math.abs ( startTy - endTy) < 6 ){
console.log( 'タップイベントを起動' );
}
}, false );

ダブルタップイベント

doubleTap イベントは、指が同じ位置範囲内で非常に短い時間内に画面を 2 回タップしたときにトリガーされるイベントです。一部のブラウザでは、doubleTap イベントによってテキストが選択されます。テキストを選択したくない場合は、要素に user-select:none CSS 属性を追加できます。

コードをコピー コードは次のとおりです:

var isTouchEnd = false,
lastTime = 0,
lastTx = null,
lastTy = null,
firstTouchEnd = true,
body = document.body,
dTapTimer、startTx、startTy、startTime;

element.addEventListener( 'touchstart', function( e ){
if( dTapTimer ){
clearTimeout( dTapTimer );
dTapTimer = null;
}

var touch = e.touches[0];

startTx = touch.clientX;
startTy = touch.clientY
}, false );

element.addEventListener( 'touchend', function( e ){
var touch = e.changedTouches[0],
endTx = touch.clientX,
endTy = touch.clientY,
now = Date.now(),
期間 = now - lastTime;

// まずシングルタップイベントがトリガーできることを確認します
if( Math.abs(startTx - endTx) < 6 && Math.abs(startTx - endTx) < 6 ){
/ / 2 つのタップ間の間隔は 500 ミリ秒以内でなければなりません
if(duration <301 ){
// このタップ位置と前のタップ位置の間には一定範囲の誤差が許容されます
if( lastTx ! == null &&
Math.abs(lastTx - endTx) <45 &&
Math.abs(lastTy - endTy) <45 ){

firstTouchEnd = true;
lastTx = lastTy = null;
console.log( 'ダブルタップイベントの発生' );
}
}
else{
lastTx = endTx ;
lastTy = endTy;
}
}
else{
firstTouchEnd = true;
lastTx = lastTy = null;
}

lastTime = now;
}, false );

// iOS Safari では、指で画面をタップする速度が速すぎると、
// touchstart イベントと touchend イベントが 2 回目に応答しない可能性があります
// 同時に、指で長時間タップしてもクリックがトリガーされない

if( ~navigator.userAgent.toLowerCase().indexOf('iphone os') ){

body.addEventListener( 'touchstart', function( e ){
startTime = Date.now();
}, true );

body.addEventListener( 'touchend', function( e ){
var noLongTap = Date.now() - startTime <501;

if( firstTouchEnd ){
firstTouchEnd = false;
if( noLongTap && e.target === element ){
dTapTimer = setTimeout(function(){
firstTouchEnd = true;
lastTx = lastTy = null; }
else{
firstTouchEnd = true ;
}
}, true );

// iOS では、指で画面を複数回タップする速度が速すぎる場合、クリック イベントはトリガーされません
element.addEventListener( 'click', function( e ){
if( dTapTimer ){

clearTimeout( dTapTimer );

dTapTimer = null;
firstTouchEnd = true;
}
}, false );

}

長押しイベント

longTap イベントは、指を動かさずに画面を長押しするとトリガーされるイベントです。

コードをコピー

コードは次のとおりです:

var startTx、startTy、lTapTimer;

element.addEventListener( 'touchstart', function( e ){
if( lTapTimer ){
clearTimeout( lTapTimer );
lTapTimer = null;
}

var touch = e.touches[0];

startTx = touchs.clientX;
startTy = touch.clientY;

lTapTimer = setTimeout(function(){
console.log( 'ロングタップイベントの発生' );
}, 1000 );

e.preventDefault();
}, false );

element.addEventListener( 'touchmove', function( e ){
var touch = e.touches[0],
endTx = touchs.clientX,
endTy = touchs.clientY;

if( lTapTimer && (Math.abs(endTx - startTx) > 5 || Math.abs(endTy - startTy) > 5) ){
clearTimeout( lTapTimer );
lTapTimer = null;
}
}、false );

element.addEventListener( 'touchend', function( e ){
if( lTapTimer ){
clearTimeout( lTapTimer );
lTapTimer = null;
}
}, false ) ;

スワイプイベント

swipe イベントは、画面上で手をスライドさせた後に起動されるイベントで、手のスライドの方向に応じて、swipeLeft (左方向)、swipeRight (方向右)、swipeUp (上方向)、swipeDown (方向下) に分類されます。 >

复制代 代码如下:
var isTouchMove, startTx, startTy;
element.addEventListener( 'touchstart', function( e ){

var touch = e.touches[0];

startTx = touchs.clientX;

startTy = touchs.clientY;
isTouchMove = false;
}, false );

element.addEventListener( 'touchmove', function( e ){

isTouchMove = true;
e.preventDefault();
}, false );

element.addEventListener( 'touchend', function( e ){

if( !isTouchMove ){
return;
}

var touch = e.changedTouches[0],

endTx = touchs.clientX,
endTy = touchs.clientY,
distanceX = startTx - endTx
distanceY = startTy - endTy,
isSwipe = false;

if( Math.abs(距離X) >= Math.abs(距離Y) ){

if( 距離X > 20 ){
console.log( '左スワイプイベントを起動' );
isSwipe = true;
}
else if( distanceX console.log( '右スワイプイベントを起動' );   
isSwipe = true;
}
}
else{
if( distanceY > 20 ){
console.log( 'fire swipe event' );       
isSwipe = true;
}
else if( distanceY console.log( '下へのスワイプイベントの発生' );        
isSwipe = true;
}
}

if( isSwipe ){

console.log( 'fire スワイプ イベント' );
}
}, false );

上のモデルのイベントはすべて MonoEvent 内にカプセル化されています。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

C++ を使用して Web 開発を始めるにはどうすればよいですか? C++ を使用して Web 開発を始めるにはどうすればよいですか? Jun 02, 2024 am 11:11 AM

Web 開発に C++ を使用するには、Boost.ASIO、Beast、cpp-netlib などの C++ Web アプリケーション開発をサポートするフレームワークを使用する必要があります。開発環境では、C++ コンパイラ、テキスト エディタまたは IDE、および Web フレームワークをインストールする必要があります。たとえば Boost.ASIO を使用して Web サーバーを作成します。 HTTP リクエストの解析、応答の生成、クライアントへの返送など、ユーザー リクエストを処理します。 HTTP リクエストは Beast ライブラリを使用して解析できます。最後に、cpp-netlib ライブラリを使用して REST API を作成し、HTTP GET および POST リクエストを処理するエンドポイントを実装し、J を使用するなど、単純な Web アプリケーションを開発できます。

他の Web 開発言語と比較した C++ の長所と短所は何ですか? 他の Web 開発言語と比較した C++ の長所と短所は何ですか? Jun 03, 2024 pm 12:11 PM

Web 開発における C++ の利点には、速度、パフォーマンス、低レベル アクセスが含まれますが、一方で、急峻な学習曲線やメモリ管理要件などの制限もあります。 Web 開発言語を選択する場合、開発者はアプリケーションのニーズに基づいて C++ の利点と制限を考慮する必要があります。

PHPの現在のステータス:Web開発動向を見てください PHPの現在のステータス:Web開発動向を見てください Apr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

HTML、CSS、およびJavaScript:Web開発者に不可欠なツール HTML、CSS、およびJavaScript:Web開発者に不可欠なツール Apr 09, 2025 am 12:12 AM

HTML、CSS、およびJavaScriptは、Web開発の3つの柱です。 1。HTMLは、Webページ構造を定義し、などなどのタグを使用します。2。CSSは、色、フォントサイズなどのセレクターと属性を使用してWebページスタイルを制御します。

C++ Web 開発を学ぶにはどのようなスキルとリソースが必要ですか? C++ Web 開発を学ぶにはどのようなスキルとリソースが必要ですか? Jun 01, 2024 pm 05:57 PM

C++ Web 開発では、C++ プログラミング、ネットワーク プロトコル、データベースの知識の基本を習得する必要があります。必要なリソースには、cppcms や Pistache などの Web フレームワーク、cppdb や pqxx などのデータベース コネクタ、CMake、g++、Wireshark などの補助ツールが含まれます。単純な HTTP サーバーの作成などの実践的なケースを学ぶことで、C++ Web 開発の旅を始めることができます。

JavaScript:Web言語の汎用性の調査 JavaScript:Web言語の汎用性の調査 Apr 11, 2025 am 12:01 AM

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

HTML、CSS、およびJavaScriptの未来:Web開発動向 HTML、CSS、およびJavaScriptの未来:Web開発動向 Apr 19, 2025 am 12:02 AM

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

See all articles