jScrollPane est un plugin jQuery génial qui modifie les barres de défilement du navigateur par défaut. Je développe une application de chat qui utilisera jScrollPane. Cela fonctionne très bien jusqu'à présent, sauf que je ne peux pas déterminer la hauteur de défilement maximale. Voici ce que j'essaie de faire:Comment obtenir la hauteur de défilement maximale dans jScrollPane?
$(function()
{
$('#chatPane').jScrollPane();
var api = $('#chatPane').data('jsp');
setInterval(function()
{
$.ajax(
{
url: "Home/GetMessage",
type: "POST",
success: function (response)
{
// This next line is where the issue occurs. I need to check if the current scroll position is equal to the max scroll position. This is to implement the auto scroll if the user has scrolled to the bottom of the chat.
var atBottom = (api.getContentPane().getContentPositionY() == api.getContentPane().getMaxScrollHeight()??????);
api.getContentPane().append(response);
api.reinitialise();
if (atBottom)
api.scrollToBottom();
},
error: function (xhr, textStatus, errorThrown)
{
alert(textStatus);
}
});
}, 1000);
});
getMaxScrollHeight n'existe pas. J'ai besoin d'un moyen de déterminer la hauteur de défilement max.
EDIT: Je l'ai eu pour travailler avec les modifications suivantes à la fonction de succès ajax. Mais si quelqu'un connaît un meilleur moyen que de faire défiler vers le bas, obtenir la position actuelle, puis revenir à la position précédente, il serait très apprécié.
success: function (response)
{
var currentPosition = api.getContentPositionY();
api.scrollToBottom();
var maxPosition = api.getContentPositionY();
api.scrollToY(currentPosition);
var atBottom = (currentPosition == maxPosition);
api.getContentPane().append(response);
api.reinitialise();
if (atBottom)
api.scrollToBottom();
}
Une idée intéressante. Comment pourrais-je simuler un scrollToBottom() cependant, des idées? – Chev
Je peux penser à deux façons: la première consiste à créer une copie Javascript en mémoire qui a les mêmes propriétés que l'objet réel sur la page, et exécuter les commandes sur elle. La seconde méthode consiste à stocker la position de défilement actuelle, à exécuter les commandes sur l'objet en direct, puis à restaurer la position de défilement précédente. Cela peut faire sauter l'interface utilisateur, vous devrez donc la tester pour voir si elle est utilisable. – ChessWhiz
Le deuxième que je peux faire, mais je suis d'accord que cela provoquerait probablement un saut de l'interface utilisateur. Pourriez-vous mettre à jour votre réponse avec un exemple de code pour créer l'objet en mémoire? – Chev