Прокрутка снизу в JavaScript

#javascript

#javascript

Вопрос:

У меня есть рабочая функция bottom в JavaScript для определения, прокручивает ли пользователь нижнюю часть. Однако проблема возникает, когда у пользователя странное разрешение (например, масштаб Windows) или при увеличении. Функция больше не работает и не может определить нижнюю часть.

Вот что я сделал :

     const bottom = e.target.scrollHeight - e.target.scrollTop === e.target.clientHeight;

    if (bottom) {
        this.props.getNewValues();
    }
  

Есть ли способ избежать этого? Даже если вы не увеличиваете масштаб, это не работает для людей, отображающих сайт на телевизоре или что-то в этом роде (как это сделал мой друг)

Спасибо вам

РЕДАКТИРОВАТЬ: я применяю это к точному элементу и повторяю, что мое решение работает, за исключением разархивирования. Unzooming предоставляет значения с плавающей запятой, которые сделали ответ не совсем точным (разница составляет от 1 до 50 пикселей в зависимости от выполненного масштабирования)

Комментарии:

1. проверьте эту ссылку jsfiddle.net/8PkQN/1

2. @AbdulBasit спасибо за это, это то, что я ищу, но поскольку я делаю это для конкретного элемента, а не для всего окна, я не знаю, как это применить

3. @wuarmin Я не согласен с флагом дублирования, который вы подняли, поскольку op в вашей ссылке явно запрашивает решение jquery и не включает дополнительные сценарии (такие как масштабирование или изменение размера окна).) ..

4. @iLuvLogix вы правы. Я снял с него флажок.

Ответ №1:

Я использую эту функцию (не могу поставить себе в заслугу, поскольку ее написал кто-то другой — извините за отсутствие заслуг — это было давным-давно). Может быть, вы сможете адаптировать это к вашему варианту использования:

 (function($) {

    //CHECK SCROLLED INTO VIEW UTIL
    function Utils() {

    }

    Utils.prototype = {
        constructor: Utils,
        isElementInView: function (element, fullyInView) {
            var pageTop = $(window).scrollTop();
            var pageBottom = pageTop   $(window).height();
            var elementTop = $(element).offset().top;
            var elementBottom = elementTop   $(element).height();

            if (fullyInView === true) {
                return ((pageTop < elementTop) amp;amp; (pageBottom > elementBottom));
            } else {
                return ((elementTop <= pageBottom) amp;amp; (elementBottom >= pageTop));
            }
        }
    };

    var Utils = new Utils();
    //END CHECK SCROLLED INTO VIEW UTIL

    //USING THE ELEMENT IN VIEW UTIL
    //this function tells what to do do when the element is or isnt in view.
    //var inView = Utils.isElementInView(el, false); Where FALSE means the element doesnt need to be completely in view / TRUE would mean the element needs to be completely in view
    function IsEInView(el) {

        var inView = Utils.isElementInView(el, false);

        if(inView) {

            //console.log('in view');

        } else {
            //console.log('not in view');
        }

    };

    //Check to make sure the element you want to be sure is visible is present on the page
    var variableOfYourElement = $('#variableOfYourElement');

    //if it is on this page run the function that checks to see if it is partially or fully in view
    if( variableOfYourElement.length ) {

        //run function on page load
        IsEInView(variableOfYourElement);

        //run function if the element scrolls into view
        $(window).scroll(function(){

            IsEInView(variableOfYourElement);

        });

    }
    //END USING THE ELEMENT IN VIEW UTIL

})(jQuery);
  

Комментарии:

1. Если вы можете использовать этот скрипт для своего варианта использования, пожалуйста, примите мой ответ как правильный.

2. К сожалению, это, похоже, не подходит для моего варианта использования

3. Если вы пытаетесь что-то сделать, когда элемент находится или не находится в поле зрения. Это будет правильный ответ. Можете ли вы добавить больше информации в свой вариант использования, чтобы мы могли помочь его применить?

4. Кстати, я также использую React