Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people, just like you, are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
Solved

jQuery Window Scrolling Issue

Posted on 2015-02-11
3
166 Views
Last Modified: 2015-02-11
I have a page that initially loads 20 product. When the user hits the bottom of the page, it loads 20 more and appends it to the existing product results. Due to a problem with IE9 not performing this adequately, we decided to load more product when a user scrolls 25 pixels above the bottom of the page.

The problem is, if the user scrolls too slow, the even will fire multiple times and load 40, 60, 80, 120, even 160 product, depending on how many times the event fires. If they scroll fast, it typically works.

I think the event is firing too fast, and I'm not sure how to get the jQuery to do a single load only once if a user scrolls slowly.

I messed around with bind() and unbind() but couldn't get it to work quite right.

Does anyone have any thoughts on how to make this work (or have another solution entirely)?

    $(window).scroll(function () {
        var sum = $(window).scrollTop() + ($(window).height() * 1) + 25;
        var origDocHeight = $(document).height();
        var docHeight = $(document).height();


        // Load new data
        /////////////////////////////////////////////////
        if (sum >= docHeight) {

            // Loading product
            var thisURL = '/Products/moreResults.cfm?version=' + version;
            $.get(thisURL, {}, function (data) { $(".scrollContainer").append(data) })

        } // END IF
    });

Open in new window

0
Comment
Question by:infotechelg
  • 2
3 Comments
 
LVL 44

Accepted Solution

by:
Rainer Jeschor earned 500 total points
ID: 40604205
Hi,
just (an untested) quirk solution:
you store the size of the last load and add a fixed size in pixel which will normally take the space of 20 products. New products will only be loaded if the new position is greater than this sum.

var lastScrollEventPosition = 0;

$(window).scroll(function () {
        var sum = $(window).scrollTop() + ($(window).height() * 1) + 25;
        var origDocHeight = $(document).height();
        var docHeight = $(document).height();


        // Load new data
        /////////////////////////////////////////////////
        if (sum >= docHeight && sum>(lastScrollEventPosition+200)) {
            // Set the new position
           lastScrollEventPosition = sum;
            // Loading product
            var thisURL = '/Products/moreResults.cfm?version=' + version;
            $.get(thisURL, {}, function (data) { $(".scrollContainer").append(data) })

        } // END IF
    });

Open in new window

As I said, not tested but a possible quick good shot.
HTH
Rainer
0
 

Author Comment

by:infotechelg
ID: 40604214
Thanks Rainer, we'll give that a shot.
0
 

Author Closing Comment

by:infotechelg
ID: 40604244
Brilliant! You're the man. That worked! Thanks a bunch.
0

Featured Post

Master Your Team's Linux and Cloud Stack!

The average business loses $13.5M per year to ineffective training (per 1,000 employees). Keep ahead of the competition and combine in-person quality with online cost and flexibility by training with Linux Academy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Generate Numbers in JQuery file 11 66
Add or delete table rows 10 53
jQuery Toggle & Anchor Links 5 43
Why is initMap returning "not a function" error. 3 22
There are a couple ways to attach a JavaScript function to dynamically created elements. You can make a new script for each element as it’s created or you can use delegation. Delegation allows a single script that is added at page creation to mat…
PROBLEM: The other day I was working on adding an ajax request to a webpage that already had a dialog box on the page.  The dialog box was using relative positioning to be positioned next to a form field I had on the page.  Everything was working…
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn the basics of jQuery, including how to invoke it on a web page. Reference your jQuery libraries: (CODE) Include your new external js/jQuery file: (CODE) Write your first lines of code to setup your site for jQuery.: (CODE)

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question