10
votes

window.top.document.body.scrolltop ne fonctionne pas dans Chrome ou Firefox

J'ai le code ci-dessous qui ouvrira une fenêtre modale. Cela fonctionne dans IE 8 mais pas en chrome ou ff. Je suis nouveau dans le monde des fonctionnalités du navigateur croisé.

function ShowModal(WindowID,FramesetID)
{
    window.onscroll = function () { window.top.document.getElementById(WindowID).style.top = window.top.document.body.scrollTop; };
    window.top.document.getElementById(WindowID).style.display = "block";
    window.top.document.getElementById(WindowID).style.top = document.body.scrollTop;

    widthv=parseInt(parseInt(screen.width)/1.50);
    heightv=parseInt(parseInt(screen.height)/1.50); 

    window.top.document.getElementById(FramesetID).style.width=widthv;
    window.top.document.getElementById(FramesetID).style.height=heightv;
}


3 commentaires

Avez-vous envisagé d'utiliser quelque chose comme JQuery pour faire sortir la douleur de la fonctionnalité de navigateur croisée?


@DotNettroOKie: Vous auriez plus d'aide si vous pouviez poster les messages d'erreur réels. Chrome et Firefox ont une vue "JavaScript Console" qui indique des messages d'erreur et d'avertissement à partir du code JavaScript.


@Daniel, il n'y a pas de message d'erreur techniquement. La fenêtre modale apparaît considérablement plus petite que celle conçue pour être (en FF et Chrome).


7 Réponses :


-6
votes

Je recommanderais JQuery comme Chrispanda l'a suggéré. JQuery a un événement de défilement intégré et le reste peut être écrit en quelques lignes pour manipuler le HTML / CSS.

http://api.jquerery.com/


0 commentaires

32
votes

Selon le mode de rendu actuel de votre navigateur, vous devrez peut-être utiliser document.documentation.scrolltop au lieu de document.body.scrolltop (et de même pour défilant ).

Il y a de bon fond sur ce problème dans Article Evolt de Peter-Paul Koch (de Quirksmode .Org Fame), mais c'est à partir de 2002 et est un peu daté de maintenant.

Comme d'autres ici suggèrent, le moyen le plus simple de résoudre ce genre de problème en 2011 est de simplement utiliser un cadre JavaScript existant. jQuery est assez populaire (surtout entre les utilisateurs de Stackoverflow), mais Il y en a beaucoup d'autres aussi .


2 commentaires

Est-ce toujours le cas en 2017? Il semble ridicule que je devrais avoir à utiliser une bibliothèque tierce pour quelque chose de si simple.


document.documentation.scrolltop fonctionne bien dans les navigateurs modernes ..



19
votes

Une autre solution: xxx


1 commentaires

Fonctionne parfaitement. Merci beaucoup!



7
votes

Vous pouvez utiliser:

window.pageyOffset


4 commentaires

Zsimo, peut-être que vous pouvez élaborer ce que cela fait et où l'OP peut trouver une référence à ce sujet. Cela augmenterait la qualité de votre réponse.


Bien sûr: je ne pense pas qu'il soit nécessaire d'utiliser jQuery pour le problème avec Firefox le retour 0 avec document.body.scrolltop Utilisez simplement la fenêtre.PageYoffset pour obtenir la distance entre le haut lorsque la page Scroll de la page: développeur.mozilla.org/en-us/docs/web/api/window.scrolly simone


Travaillé pour moi. Chrome, IE9, Firefox. Merci @zsimo!


Travaillé pour moi à Chrome, IE10, Firefox



1
votes

Si vous ne voyez pas le besoin de bibliothèques tiers inutiles, vous pouvez essayer:

var scrollTop = (document.documentElement || document.body.parentNode || document.body).scrollTop;


1 commentaires

Cette réponse est fausse. Vous n'avez sûrement jamais essayé ce code.



0
votes

J'ai eu le même problème et j'ai vérifié mon code pour un débordement défini, supprimer: xxx

d'un autre élément travaillée


0 commentaires

0
votes

J'ai fini par avoir à vérifier tous les x millisecondes comme solution de contournement. Pas idéal, mais cela a fonctionné pour moi car je ne pouvais trouver aucune autre solution. Remarque, il s'agit d'un code ES6, donc si vous en avez besoin, vous devez le rendre compatible ES5 manuellement ou utiliser Babel. XXX


0 commentaires