Cela ressemble à une solution sur Internet, mais je ne sais pas pourquoi je ne la trouve pas. Je souhaite désactiver le défilement horizontal sur les appareils mobiles. Essentiellement, pour y parvenir:
body{
overflow-x:hidden // disable horizontal scrolling.
}
Cela peut être une information pertinente: j'ai aussi ceci dans mon tag tête, parce que je ne souhaite pas non plus que l'utilisateur puisse zoomer:
<meta content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;' name='viewport' />
<meta name="viewport" content="width=device-width" />
Merci
html, body {
overflow-x: hidden;
}
body {
position: relative;
}
La position relative est importante et je suis tombé dessus à ce sujet. Ne pourrait pas le faire fonctionner sans elle.
cgvector answer n'a pas fonctionné pour moi, mais cela a fonctionné:
document.body.addEventListener('touchstart', function(e){ e.preventDefault(); });
Je ne le laisserais pas comme ça, une logique plus intelligente est nécessaire pour choisir quand empêcher le défilement, mais c'est un bon début.
Tiré d'ici: Désactiver le défilement dans une application Web iPhone?
Pour les générations futures:
Pour empêcher le défilement tout en conservant le menu contextuel, essayez
document.body.addEventListener('touchmove', function(e){ e.preventDefault(); });
Il en empêche toujours bien plus que d’autres, mais pour la plupart des navigateurs, le seul comportement par défaut empêché devrait être le défilement.
Pour une solution plus sophistiquée qui permette l’insertion d’éléments de défilement dans le corps non collable et évite l’élastique, jetez un œil à ma réponse ici:
Essayez d'ajouter
html {
overflow-x: hidden;
}
aussi bien que
body {
overflow-x: hidden;
}
Je pense que la plupart des gens veulent vraiment désactiver le zoom/défilement afin de créer une expérience plus proche de celle d'une application. parce que les réponses semblent contenir des éléments de solutions pour le zoom et le défilement, mais personne ne l'a vraiment cloué.
Pour répondre à OP, la seule chose que vous semblez devoir faire pour désactiver le défilement est d’intercepter les événements scroll
et touchmove
de la fenêtre et d’appeler preventDefault
et stopPropagation
sur les événements qu'ils génèrent; ainsi
window.addEventListener("scroll", preventMotion, false);
window.addEventListener("touchmove", preventMotion, false);
function preventMotion(event)
{
window.scrollTo(0, 0);
event.preventDefault();
event.stopPropagation();
}
Et dans votre feuille de style, assurez-vous que vos balises body
et html
comprennent les éléments suivants:
html:
{
overflow: hidden;
}
body
{
overflow: hidden;
position: relative;
margin: 0;
padding: 0;
}
Toutefois, le défilement est une chose, mais vous souhaitez probablement également désactiver le zoom. Ce que vous faites avec la balise meta dans votre balisage:
<meta name="viewport" content="user-scalable=no" />
Tous ces éléments réunis vous offrent une expérience similaire à celle d'une application, probablement la meilleure solution pour la toile.
(Méfiez-vous des conseils de certains pour ajouter des attributs tels que initial-scale
et width
à la balise meta si vous utilisez une toile, car les canevas scale leur contenu, contrairement aux éléments de bloc, et vous vous retrouverez avec une toile laide, plus souvent qu'autrement).
utilisez ceci avec style
body
{
overflow:hidden;
width:100%;
}
Utilisez ceci dans la balise principale
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0" />
<meta name="Apple-mobile-web-app-capable" content="yes" />
Dans l'en-tête de page, ajoutez
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-sacle=1, maximum-scale=1, user-scalable=no">
Dans la feuille de style de la page, ajoutez
html, body {
overflow-x: hidden;
overflow-y: hidden;
}
C'est à la fois HTML et corps!
Cela fonctionne pour moi:
window.addEventListener("touchstart", function(event){
if(event.target.tagName=="HTML" || event.target.tagName=="BODY"){
event.preventDefault();
}
} ,false);
Cela ne fonctionne pas à 100% et j'ai également ajouté ceci:
window.addEventListener("scroll",function(){
window.scrollTo(0,0)
},false)
La propriété CSS touch-action peut vous donner ce que vous cherchez, bien que ce soit peut ne pas fonctionner dans tous vos navigateurs cibles.
html, body {
width: 100%; height: 100%;
overflow: hidden;
touch-action: none;
}