如何联系 javascript 中的 position/direction?
How to get touch position/direction in javascript?
目标
我想分别获取触摸位置和触摸移动的方向,并根据移动淡入或淡出登录按钮(出于测试目的,我现在只是更改背景)
问题
控制台给我以下错误:
Cannot read property 'changedTouches' of undefined at HTMLDocument.checkScrollPosition
分别
Cannot read property 'touches' of undefined at HTMLDocument.checkScrollPosition
我正在使用 Laravel 和纯 JS。
这就是我实际尝试的功能(它在 ToggleLogin.js 内部):
window.onload = function FadeLoginButton() {
const width = window.innerWidth;
if (width < 850) {
document.addEventListener("touchstart", startTouch);
document.addEventListener("touchmove", checkScrollPosition);
}
};
let touchstart;
function startTouch(e) {
touchstart = e.originalEvent.touches[0].clientY;
}
function checkScrollPosition(e) {
const touchend = e.originalEvent.changedTouches[0].clientY;
const button = document.getElementById("mobile-login-btn");
if (touchstart > touchend) {
button.style.background = "green";
} else {
button.style.background = "blue";
}
}
或变体:
window.onload = function FadeLoginButton() {
const width = window.innerWidth;
if (width < 850) {
document.addEventListener("touchstart", checkScrollPosition);
document.addEventListener("touchmove", checkScrollPosition);
}
};
function checkScrollPosition(e) {
const touchstart = e.originalEvent.touches[0].clientY;
const touchend = e.originalEvent.changedTouches[0].clientY;
const button = document.getElementById("mobile-login-btn");
if (touchstart > touchend) {
button.style.background = "green";
} else {
button.style.background = "blue";
}
}
这就是调用函数的 blade:
<button class="floating-btn" id="mobile-login-btn" onClick="ToggleMobileLogin()">Login</button>
<div class=login-modal id="login-modal">
<form class="modal-content">
<input type="checkbox" class="close-button" onClick="ToggleMobileLogin()" />
<a class="close-cross"></a>
<input class="basic-input" placeholder="Name" autofocus />
<input class="basic-input" placeholder="Passwort" />
<button class="basic-btn">Anmelden</button>
</form>
</div>
@push('scripts')
<script src="{{ asset('js/components/ToggleLogin.js')}}"></script>
@endpush
一整天都在尝试不同的方法。受到来自 Whosebug 的这个建议的启发:
Link1
我也找到了这个 post,但这对我的情况没有帮助。
在这里你可以找到 whole branch
我想,这是一个简单的 javascript 错误。显然是未定义的 ;) 也许有人可以放开我?
你不应该在原版 javascript 中使用 e.originalEvent
。那是 jQuery 事件 API.
的一部分
尝试:
touchstart = e.touches[0].clientY
和
e.changedTouches[0].clientY
应该可以。
获取滚动方向的方法如下;
var prevScrollPos = 0;
el.ontouchmove = function(ev) {
console.log(prevScrollPos - ev.changedTouches[0].clientY);
prevScrollPos = ev.changedTouches[0].clientY;
};
控制台记录的值可以是-ve 和+ve,表示用户滚动的方向。 (我用的是el
,你可以换成window
)
目标
我想分别获取触摸位置和触摸移动的方向,并根据移动淡入或淡出登录按钮(出于测试目的,我现在只是更改背景)
问题
控制台给我以下错误:
Cannot read property 'changedTouches' of undefined at HTMLDocument.checkScrollPosition
分别
Cannot read property 'touches' of undefined at HTMLDocument.checkScrollPosition
我正在使用 Laravel 和纯 JS。
这就是我实际尝试的功能(它在 ToggleLogin.js 内部):
window.onload = function FadeLoginButton() {
const width = window.innerWidth;
if (width < 850) {
document.addEventListener("touchstart", startTouch);
document.addEventListener("touchmove", checkScrollPosition);
}
};
let touchstart;
function startTouch(e) {
touchstart = e.originalEvent.touches[0].clientY;
}
function checkScrollPosition(e) {
const touchend = e.originalEvent.changedTouches[0].clientY;
const button = document.getElementById("mobile-login-btn");
if (touchstart > touchend) {
button.style.background = "green";
} else {
button.style.background = "blue";
}
}
或变体:
window.onload = function FadeLoginButton() {
const width = window.innerWidth;
if (width < 850) {
document.addEventListener("touchstart", checkScrollPosition);
document.addEventListener("touchmove", checkScrollPosition);
}
};
function checkScrollPosition(e) {
const touchstart = e.originalEvent.touches[0].clientY;
const touchend = e.originalEvent.changedTouches[0].clientY;
const button = document.getElementById("mobile-login-btn");
if (touchstart > touchend) {
button.style.background = "green";
} else {
button.style.background = "blue";
}
}
这就是调用函数的 blade:
<button class="floating-btn" id="mobile-login-btn" onClick="ToggleMobileLogin()">Login</button>
<div class=login-modal id="login-modal">
<form class="modal-content">
<input type="checkbox" class="close-button" onClick="ToggleMobileLogin()" />
<a class="close-cross"></a>
<input class="basic-input" placeholder="Name" autofocus />
<input class="basic-input" placeholder="Passwort" />
<button class="basic-btn">Anmelden</button>
</form>
</div>
@push('scripts')
<script src="{{ asset('js/components/ToggleLogin.js')}}"></script>
@endpush
一整天都在尝试不同的方法。受到来自 Whosebug 的这个建议的启发:
Link1
我也找到了这个 post,但这对我的情况没有帮助。
在这里你可以找到 whole branch
我想,这是一个简单的 javascript 错误。显然是未定义的 ;) 也许有人可以放开我?
你不应该在原版 javascript 中使用 e.originalEvent
。那是 jQuery 事件 API.
尝试:
touchstart = e.touches[0].clientY
和
e.changedTouches[0].clientY
应该可以。
获取滚动方向的方法如下;
var prevScrollPos = 0;
el.ontouchmove = function(ev) {
console.log(prevScrollPos - ev.changedTouches[0].clientY);
prevScrollPos = ev.changedTouches[0].clientY;
};
控制台记录的值可以是-ve 和+ve,表示用户滚动的方向。 (我用的是el
,你可以换成window
)