В последнее время в процессе разработки мы столкнулись с новыми требованиями: в официальном аккаунте WeChat запрещено опускать наше доменное имя, доменное имя в официальном аккаунте WeChat автоматически считывается встроенным браузером WeChat по URL-адресу, и пользовательская функция временно не поддерживается. Исходя из того, что его нельзя изменить, я придумал способ запретить выпадающее меню страницы. Итак, есть следующий код:
$(document).ready(function(){
function stopScrolling( touchEvent ) {
touchEvent.preventDefault();
}
document.addEventListener( 'touchstart' , stopScrolling , false );
document.addEventListener( 'touchmove' , stopScrolling , false );
});
【Примечание】
- Этот метод не работает для IOS 10.X.X и выше
- Этот метод работает на одной странице, которую нельзя прокрутить. Если вам нужно прокрутить одну страницу, рекомендуется следующий метод.
Это действительно может решить проблему запрета выпадающего списка, но будет новая проблема [страница ссылка и событие клика не могут быть вызваны], поэтому событие touchstart удалено.
Конкретные причины следующие:
Когда на мобильном терминале щелкают по экрану, последовательно запускаются события touchstart, touchmove, touchend и click. Правильная процедура триггера должна быть:
touchstart→touchmove→touchendилиtouchstart→touchend→щелчок.
Если палец скользит при касании экрана, событие щелчка не будет запущено.
- Если вам нужно использовать специальные эффекты сенсорных событий, вы должны добавить метод event.preventDefault() в touchstart или touchmove.
- Если в touchstart есть метод event.preventDefault(), событие щелчка и метод метки не будут запущены. Здесь можно использовать тап вместо клика, но тег a не очень удобен.
- Если в touchmove есть метод event.preventDefault(), лучше всего добавить оценку направления.Конечно, если контенту вашей страницы не нужны полосы прокрутки, вам не нужно добавлять оценку.
Тем не менее, все еще будет проблема [феномен раскрывающегося списка все еще будет отображаться на странице списка], что означает, что он не работает.
- не напрямуюhtmlилиbodyдобавить этот метод на
- Но есть ошибка: если вы быстро проводите вверх и вниз, все равно будет отображаться «страница, предоставленная XXX» (используйте инерционную прокрутку, чтобы решить эту проблему, но она еще не решена, пожалуйста, не стесняйтесь звонить, если у вас есть решение)
- Этот метод рекомендуется для версий выше IOS 10.X.X.
- Этот метод рекомендуется, если вам нужно скользить по одной странице.
$(document).ready(function(){
var app=document.getElementById("app");
var touchstartY;
app.addEventListener("touchstart",function(event){
var events=event.touches[0]||event;
touchstartY=events.clientY;//获取触摸目标在视口中的y坐标
},false);
app.addEventListener("touchmove",function(event){
var events=event.touches[0]||event;
//注意document.body.scrollTop始终为0
var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;//获取滚动部分的高度
var clientHeight=document.documentElement.clientHeight;//获取手机屏幕高度(可视部分高度)
var scrollHeight=document.body.scrollHeight;//所有内容的高度
if(events.clientY>touchstartY&&scrollTop===0&&event.cancelable){
event.preventDefault();//禁止到顶下拉
}else if(scrollTop+clientHeight>scrollHeight&&event.cancelable){
event.preventDefault();//禁止到底上拉
}
},false);
})