Pass mousewheel event through fixed content

后端 未结 5 2051
有刺的猬
有刺的猬 2020-12-31 04:42

The best way to understand this is to look at this fiddle.

Notice how mouse wheel over the fixed content in the red box does nothing. I would like the

5条回答
  •  星月不相逢
    2020-12-31 05:25

    I think this does what you're asking for!

    $('#fixed').bind('mousewheel', function(e){
         var scrollTo= (e.wheelDelta*-1) + $('#container').scrollTop();
        $("#container").scrollTop(scrollTo);
    });
    

    EDIT: Updated the jsFiddle link to one that actually works
    DOUBLE EDIT: Best to dispense with the .animate() on further testing...
    jsFiddle Example

    TRIPLE EDIT: Much less pretty (and will probably be horribly slow with a lot of elements on the page), but this works and I owe a lot to this stackoverflow answer.

    $('#fixed').bind('mousewheel', function(e) {
    
    
    var potentialScrollElements = findIntersectors($('#fixed'), $('*:not(#fixed,body,html)'));
    $.each(potentialScrollElements, function(index, Element) {
        var hasVerticalScrollbar = $(Element)[0].scrollHeight > $(Element)[0].clientHeight;
        if (hasVerticalScrollbar) {
            var scrollTo = (e.wheelDelta * -1) + $(Element).scrollTop();
            $(Element).scrollTop(scrollTo);
        }
    });
    });
    
    
    function findIntersectors(targetSelector, intersectorsSelector) {
    var intersectors = [];
    
    var $target = $(targetSelector);
    var tAxis = $target.offset();
    var t_x = [tAxis.left, tAxis.left + $target.outerWidth()];
    var t_y = [tAxis.top, tAxis.top + $target.outerHeight()];
    
    $(intersectorsSelector).each(function() {
        var $this = $(this);
        var thisPos = $this.offset();
        var i_x = [thisPos.left, thisPos.left + $this.outerWidth()]
        var i_y = [thisPos.top, thisPos.top + $this.outerHeight()];
    
        if (t_x[0] < i_x[1] && t_x[1] > i_x[0] && t_y[0] < i_y[1] && t_y[1] > i_y[0]) {
            intersectors.push($this);
        }
    
    });
    return intersectors;
    

    }

提交回复
热议问题