代码之家  ›  专栏  ›  技术社区  ›  Marc

设置为“无”后重新设置滚动捕捉类型无效

  •  0
  • Marc  · 技术社区  · 6 年前

    最新版本的Chrome 69现在支持滚动捕捉类型,但显然不是很好。

    原始CSS:

        .carousel {
            scroll-snap-type: x mandatory;
        }
    

    使用jquery动画化转换:

    $(".carousel").css("scroll-snap-type", "none");
    $(".carousel").animate({
        scrollLeft : 1000,
    }, {
        complete : function() {
            // fail:
            $(".carousel").css("scroll-snap-type", "x mandatory");
        }
    });
    

    如果不这样做,动画将捕捉到旋转木马中的每个元素,使其看起来非常不平稳。所以,我们首先禁用滚动捕捉类型的css。这很管用。唯一的问题是,chrome忽略了将该属性重新设置为其原始值的指令!

    我听说这是野生动物园的作品。

    任何想法,解决方案,解决办法都是最受欢迎的!

    1 回复  |  直到 6 年前
        1
  •  2
  •   Marc    6 年前

    嗯,Chrome是一辆小车,但至少我们有一个解决办法:

    新CSS:

            .item-carousel {
                scroll-snap-type: x mandatory;
            }
    
            .snap {
                scroll-snap-align: start;   
                scroll-snap-stop: always;
            }
    

    新HTML:

    <div class="item-carousel">
        <div class="item snap" >
            ...
        </div>
    </div>
    

    新JS:

    $(".item").removeClass("snap");
    $(".item-carousel").animate({
        scrollLeft : 1000,
    }, {
        complete : function() {
            $(".item").addClass("snap");
        },
    });
    

    新的想法是,不要在容器上操作滚动捕捉类型属性,而是在包含的项上添加和删除“捕捉”类。不知何故,这是可行的。