JavaScript モバイルデバイスのタッチイベントのカプセル化の例 Web 開発_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 ){
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 (方向下) に分類されます。 >
element.addEventListener( 'touchstart', function( e ){
var touch = e.touches[0];
startTy = touchs.clientY;
isTouchMove = false;
}, false );
isTouchMove = true;
e.preventDefault();
}, false );
if( !isTouchMove ){
return;
}
endTx = touchs.clientX,
endTy = touchs.clientY,
distanceX = startTx - endTx
distanceY = startTy - endTy,
isSwipe = false;
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;
}
}
console.log( 'fire スワイプ イベント' );
}
}, false );

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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++ の利点と制限を考慮する必要があります。

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

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

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

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

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