2013-08-06 93 views
0

我正在使用scrollTop函数来检测用户距离屏幕底部多近以添加更多内容。我的javascript函数是这样的:scrollTo呼叫速度太快

if ($(window).scrollTop() >= $(document).height() - $(window).height() - 75) { 
    var url = '<%=Url.Action("MoreView", "Status", new { id = ViewData["Id"], 
    page = Convert.ToInt32(ViewData["PageNumber"])+1 })%>'; 

      NextPage(url); //this does an ajax call to the action method on the server 

     } 

一切工作正常,问题是,window.ScrollTop> 75有时happeng 2或3次如此之快,它加载相同内容的2〜3倍。我可以通过在服务器端使用会话变量来解决这个问题,但不想走这条路线,因为这可能会让IMO变得丑陋。有什么建议么?

回答

0

现在,你会一直向同一个URL发送请求(每次都会产生相同的数据,除非我误解你在做什么)。一旦你解决这个问题,你可能会想你的包裹功能时,在debounce功能用户滚动(我使用Underscore.js'这个例子debounce功能)被称为:

// Only call yourOnScroll once it hasn't been called 
// for more than 100 milliseconds 
yourOnScroll = _.debounce(youOnScroll, 100); 
+0

正如你看到的在var Url中设置为为当前的VideData [PageNumber]添加一个+1。在我的MVC动作中,这个VideData [PageNumber]被设置为任何页面变量通过。所以它应该在部分视图的每个渲染上都有所不同,但是由于它发生得太快,部分视图将具有相同的viewdata变量 – Jake

+0

@Jake - 因此,您要在此部分视图中加载此代码*然后? (如果是这样,你确定问题出在你的JavaScript中,而不是在你的'MoreView'中......如果JavaScript只是在页面/部分负载上执行,那么它每次负载不会发生超过一次,对吧? ) –

+0

@ SeanVieira-是的,我正在加载我的部分视图。我改变了触发ajax调用的scrollTop来代替链接,并且它可以正常工作,而不需要使用点击两次加载相同的数据。但点击加载页面更多的内容是旧时尚,我试图模仿Facebook的做法。 – Jake