亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將多個滾動事件偵聽器合并為一個?

如何將多個滾動事件偵聽器合并為一個?

蕭十郎 2022-09-02 16:24:01
我有以下功能,可以在圖像進入視口后縮小圖像?,F在,它附加的事件偵聽器與元素一樣多。出于性能原因,我想將它們組合成一個所有元素的事件偵聽器,但我不知道如何操作。這是我的代碼:斷續器<div class="image-wrapper">     <div class="image-container elem-1">        <div class="zoom-images">            <img class="zoom" src="test" alt="test">        </div>    </div>    <div class="image-container elem-2">        <div class="zoom-images">            <img class="zoom" src="test" alt="test">        </div>    </div>    <div class="image-container elem-3">        <div class="zoom-images">            <img class="zoom" src="test" alt="test">        </div>    </div></div>JAVASCRIPT$('.zoom').each(function() {    var el = $(this);    var inViewport = false;    var isZooming = false;    originY = 0;    window.addEventListener('scroll', throttle(zoomImage, 250), {passive: true});    function zoomImage() {        originY = $(window).scrollTop();        if (el.isInViewport()) {            if (!inViewport) {                inViewport = true;             }        } else {            if (inViewport) {                inViewport = false;            }        }           if (inViewport) {            if (!isZooming) {                window.requestAnimationFrame(function () {                    el.addClass('is-zooming');                });                isZooming = true;            }        } else {            if (isZooming) {                window.requestAnimationFrame(function () {                    el.removeClass('is-zooming');                });                isZooming = false;            }        }    };    $.fn.isInViewport = function() {        var elementTop = $(this).offset().top;        var elementBottom = elementTop + $(this).outerHeight();        var viewportTop = $(window).scrollTop();        var viewportBottom = viewportTop + $(window).height();        return elementBottom > viewportTop && elementTop < viewportBottom;    };});任何幫助將不勝感激!多謝!
查看完整描述

2 回答

?
慕仙森

TA貢獻1827條經驗 獲得超8個贊

我找到了解決方案。對于任何感興趣的人,我是這樣解決的:


window.addEventListener('scroll', throttle(check_if_in_view, 220), {

    capture: true,

    passive: true

});

var $animation_elements = $('.zoom-images');

var $window = $(window);

function check_if_in_view() {

    var window_height = $window.height();

    var window_top_position = $window.scrollTop();

    var window_bottom_position = (window_top_position + window_height);

    $.each($animation_elements, function() {

        var $element = $(this);

        var $zoom = $(this).children('img.zoom');

        var element_height = $element.outerHeight();

        var element_top_position = $element.offset().top;

        var element_bottom_position = (element_top_position + element_height);

        if ((element_bottom_position >= window_top_position) &&

            (element_top_position <= window_bottom_position)) {

            requestAnimationFrame( function() {

                $zoom.addClass('is-zooming');

            });

        } else {

            requestAnimationFrame( function() {

                $zoom.removeClass('is-zooming');

            });

        }

    });

};


查看完整回答
反對 回復 2022-09-02
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

將偵聽器附加到感興趣事物的容器中,事件將“冒泡”到它們身上。(事件調用將告訴您哪個對象是目標。


查看完整回答
反對 回復 2022-09-02
  • 2 回答
  • 0 關注
  • 82 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號