2012-05-08 43 views
0

我正在做一個小聊天,只是爲了好玩防止scrollTop的(上下)滾動條時,點擊/使用

當新的消息被加載,它滾動到div(#chatlist)的底部是保存所有消息。但當我使用div的滾動條(overflow:auto)時,它也會嘗試向下滾動。 我該如何避免這種情況?

我曾嘗試過各種不點擊的檢測方法,沒有運氣到目前爲止

這裏是我的代碼。間隔觸發它每幾秒鐘:

var chatlist = $('#chatlist'); 

function chatinterval() { 
    $.ajax({ 
     type: "POST", 
     url: '/chatinterval.php', 
     data: "dbtime=" + latestchat, 
     dataType: "json", 
     success: function (data) { 
      if (data) { 
       chatlist.append(data.dbtext); 
       latestchat = data.dblatest; 
       // this part makes it scroll down 
       chatlist.scrollTop(chatlist[0].scrollHeight - chatlist.height()); 
      } 
     } 
    }); 
} 
+0

什麼textarea的? – VisioN

+0

哎呀抱歉,它實際上是一個溢出的div:auto。所以「textarea」是#chatlist – mowgli

回答

1

可以使用mousedownscroll事件來控制標記變量(例如clicked)。由於mouseup在您滑過滾動條時未觸發,因此我們可以在每個scroll事件中設置超時(在我的示例中爲5秒),以等待用戶停止手動滾動。因此,最終的代碼應該是這樣的:

var chatlist = $('#chatlist'); 

var timer = null; 
var clicked = false; 

chatlist.on({ 
    mousedown: function() { 
     clicked = true; 
    }, 
    scroll: function() { 
     clearTimeout(timer); 
     timer = setTimeout(function() { 
      clicked = false; 
     }, 5000); 
    } 
}); 

function chatinterval() { 
    $.ajax({ 
     type: "POST", 
     url: '/chatinterval.php', 
     data: "dbtime=" + latestchat, 
     dataType: "json", 
     success: function (data) { 
      if (data) { 
       chatlist.append(data.dbtext); 
       latestchat = data.dblatest; 
       // this part makes it scroll down 
       if (!clicked) { 
        chatlist.scrollTop(chatlist[0].scrollHeight - chatlist.height()); 
       } 
      } 
     } 
    }); 
} 

DEMO:http://jsfiddle.net/rkUt9/

+0

你的代碼有一個小小的缺陷,你做演示的方式,用戶不能切換回自動滾動。他進入手動滾動永久。你可以看看我的答案,看看你是否可以實現我的想法(如果適用)的代碼實現。 – Peter

+0

在我的例子中,你必須等待5秒鐘,然後自動滾動返回。 – VisioN

+0

我的歉意,但我敢肯定,當我打開它時,第五條規則不存在,我想你在稍後添加它或者對我沒有什麼效果。儘管如此,這是一個很好的片段,謝謝。 – Peter

相關問題