JQueryを使用してトラックパッドにクエリを実行できますか?だから私はこのようなことをすることができます:
疑似Javascript(JQuery)
$(document).keyInput().trackpadTwoFingersLeft(function() {
$('#div ul').animate({left: "=+1"},1);
});
これを実行できるプラグインまたは別のフレームワークはありますか?
すべての応答とアイデアをありがとう。:)
JQueryを使用してトラックパッドにクエリを実行できますか?だから私はこのようなことをすることができます:
疑似Javascript(JQuery)
$(document).keyInput().trackpadTwoFingersLeft(function() {
$('#div ul').animate({left: "=+1"},1);
});
これを実行できるプラグインまたは別のフレームワークはありますか?
すべての応答とアイデアをありがとう。:)
私はWebを少し調べましたが、これまでのところ、ChromeとSafariの両方がブラウザーでこれらのイベントを公開していないことがわかりました。
https://superuser.com/questions/27627/three-finger-page-up-page-down-in-safari-chrome
Firefoxは何かをサポートしています:
https://developer.mozilla.org/En/DOM/Mouse_gesture_events
しかし、私はこれへの言及をあまり見ません。
1つのブラウザだけがそれをサポートしている場合、この種のイベントを使用することは少し役に立たないと思います。
Macで2本指のスワイプを検出するために使用できるホイールイベントがあります。
コードは次のようになります。
$('element').on('wheel', function(e){
var eo = e.originalEvent;
if(Math.abs(eo.wheelDeltaY) < 10 && Math.abs(eo.wheelDeltaX) > 2){
e.preventDefault();
if(eo.wheelDeltaX < -100 && !scope.item.swipedLeft){
// swipe left
}
if(eo.wheelDeltaX > 100 && scope.item.swipedLeft){
// swipe right
}
}
});
これは、一部の古いブラウザやMozillaでは機能しない可能性があります(ホイールの動きに対して別のイベントが発生するため)が、これを追加/ヘルパー機能として実装する限り、このコードで十分です。
おそらく、マウスホイールトラッキングを使用して、目的の効果を得ることができます:http ://www.switchonthecode.com/tutorials/javascript-tutorial-the-scroll-wheel
jQueryを使用する場合は、このマウスホイールプラグインが役立ちます:http://brandonaaron.net/code/mousewheel/docs
トラックパッドの使用状況を判断するには、まずOSXマシンにトラックパッドが搭載されていると想定し、次にそのユーザーがマウスを接続しているかどうかを検出します。typescriptを使用しているので、すみませんが、javascriptで動作します。
まず、ユーザーエージェントのプロパティを確認し、OSXの場合は、プロパティがあると想定します。OSが何であるかを判断するために、ユーザーエージェントでいくつかの基本的な文字列式を使用するだけです。
if (!props.isMobile && props.operatingSystem === OSType.Darwin) {
props.hasTouchpad = true
props.hasGestureSupport = props.browser === BrowserType.Safari | props.isMobile
}
次に、ホイールイベントをリッスンして、そのデバイスを排除します。トラックパッドデバイスは、整数ではない非常に小さなdeltaY値を作成します。私はこれを試しましたが、とても良い仕事をしています。
const detectMouseType = useCallback((e:WheelEvent) => {
if (e.ctrlKey || !browserProperties.hasTouchpad) {
//Didn't detect originally, or pinch zoom OSX and surface, ignore
return
}
let isMouse = e.deltaX === 0 && !Number.isInteger(e.deltaY)
isMouseCounts.push(isMouse ? 1 : 0)
if (isMouseCounts.length > 5) isMouseCounts.shift()
let sum = isMouseCounts.reduce(function(a, b) { return a + b; });
if (sum > 3 && e.type === "wheel") {
console.log("Touchpad disabled")
//detected a mouse not a touchpad, maybe a mouse plugged into a mac
document.removeEventListener('wheel', detectMouseType);
props.hasTouchpad = false
props.hasGestureSupport = false
}
}, [])
次に、トラックパッドイベントの使用と、通常はサポートされていないブラウザ(HammerJSなど)でのピンチの検出について説明します。OSXSafariおよびiOS Safariでは、ピンチと回転を検出するのに十分な「gesturestart」イベントと「gesturechange」イベントが発生します。必要なデータを取得するために使用できるスケールおよび回転パラメーターがあります。
始めるためのコードは次のとおりです。
https://medium.com/@auchenberg/detecting-multi-touch-trackpad-gestures-in-javascript-a2505babb10e
OSX Chromeでは、「wheel」イベントを使用して、ピンチ、スクロール、および2本の指のタップを検出できます。表示されるほとんどのソリューションは、OSX Chromeでのピンチまたは2つのフィニガータップをサポートしていませんが、これはサポートしています。Chromeと他のすべてのブラウザのマウスで2本の指でタップしてピンチする方法は次のとおりです。
let scale = 1.0;
let posX = 0.0;
let posY = 0.0;
element.addEventListener('wheel', (e) => {
e.preventDefault();
if (e.ctrlKey) {
//using two fingers
if (e.deltaY === 0 && e.deltaX === 0) {
console.log("Chrome two finger tap detected")
} else {
console.log("pinch zoom")
scale = scale - e.deltaY * 0.01
}
} else {
console.log('scrolling')
posX = posX - e.deltaX * 2
posY = posY - e.deltaY * 2
}
});
ここにいくつかの情報がありますが、私はそれをテストすることができませんでした
function setupForceClickBehavior(someElement)
{
// Attach event listeners in preparation for responding to force clicks
someElement.addEventListener("webkitmouseforcewillbegin", prepareForForceClick, false);
someElement.addEventListener("webkitmouseforcedown", enterForceClick, false);
someElement.addEventListener("webkitmouseforceup", endForceClick, false);
someElement.addEventListener("webkitmouseforcechanged", forceChanged, false);
}