2013-04-04 2 views
0

Я использую многострочное текстовое поле в виде окна чата, используя асинхронную обратную передачу. Я смог сохранить положение прокрутки, но когда пользователь читает сообщения чата, текстовое поле автоматически прокручивается до самого низа. Я могу поддерживать позицию, на которой пользователь находится, или автоматически прокручивать ее вниз. Тем не менее, я хочу сделать то и другое.Как остановить сохранение положения прокрутки во время асинхронной обратной передачи ajax, когда пользователь вручную изменил положение прокрутки?

Вот мой код:

var prm = Sys.WebForms.PageRequestManager.prm.add_beginRequest(BeginRequestHandler); 
prm.add_endRequest(EndRequestHandler); 
function BeginRequestHandler(sender, args) { 
    xPos = $get('txtChatBox').scrollLeft; 
    yPos = $get('txtChatBox').scrollTop; 
    zpos =$get('txtChatBox').scrollHeight; 
} 

function EndRequestHandler(sender, args) { 
    $get('txtChatBox').scrollLeft = xPos + 1; 
    $get('txtChatBox').scrollTop = yPos + 1; 
    $get('txtChatBox').scrollTop =zpos+1; 
} 

Может кто-нибудь, пожалуйста, помогите мне?

Заранее спасибо

+0

Вы должны включить код, который вы используете, и быть конкретным в отношении какой части проблемы. – catchamonkey

+0

Удалите, сделайте это частью вопроса и отформатируйте его. – catchamonkey

ответ

0

Вы можете использовать scroll event для обнаружения ли пользователь вручную прокручивать прочь.

var xPos, yPos, hasScrolled, timer, box = $get('txtChatBox'); 
box.onscroll = function(e) { 
    hasScrolled = true; 
    /* if you want to invalidate the flag after the user has not scrolled 
    for a certain period, use 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
    hasScrolled = false; 
    }, 60000) // 1 min for example 
    */ 
}; 
function BeginRequestHandler(sender, args) { 
    xPos = box.scrollLeft; 
    yPos = box.scrollTop; 
    zPos = box.scrollHeight; 
    hasScrolled = false; 
} 
function EndRequestHandler(sender, args) { 
    if (!hasScrolled) { 
    box.scrollLeft = xPos + 1; 
    box.scrollTop = zPos+1; 
    } 
} 

Или вы просто сравните хранимую scrollTop (yPos) к текущей, чтобы обнаружить ли прокручивать пользователь прочь (а не назад):

function EndRequestHandler(sender, args) { 
    if (box.scrollTop == yPos) { 
    box.scrollLeft = xPos + 1; 
    yPos = box.scrollTop = zPos+1; 
    } 
} 
Смежные вопросы