代码之家  ›  专栏  ›  技术社区  ›  Alexander Prisazhny

jQuery问题:body overflow vs body margin

  •  2
  • Alexander Prisazhny  · 技术社区  · 7 年前

    当我点击一个div时,我想隐藏正文的溢出部分,并在正文中添加一个滚动条宽度的右边距。这是我的jQuery:

    var getScrollbarWidth = function () {
        var scrollElement = document.createElement("div"); // Create element
        scrollElement.addClass("scrollbar-element"); // Apply predefined style
    
        document.body.appendChild(scrollElement); // Add element to page
        var scrollbarWidth = scrollElement.offsetWidth - scrollElement.clientWidth; // Subtract width without scrollbar from width with scrollbar
        document.body.removeChild(scrollElement); // Remove element from page
        return scrollbarWidth;
      };    
    
    $(".thumbnail").on("click", function () {
        $(".project-wrap").addClass("project-open");
        $("body").attr("margin-right", getScrollbarWidth() + "px");
        $(".project-button").attr("margin-right", getScrollbarWidth() + "px");
        $("body").addClass("body-overflow");
      }
    

    和css:

    .body-overflow
      overflow: hidden !important
    .project-open
        display: block !important
    

    问题是如果“$(“body”).addClass(“body overflow”);”最后,它不起作用,但如果它位于thimbnail click函数的第一行,则不会应用主体边距。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Maarten van Tjonger    7 年前

    在添加之前,请尝试将滚动条宽度存储在变量中 body-overflow

    $(".thumbnail").on("click", function () {
        var scrollbarWidth = getScrollbarWidth();
    
        $("body").addClass("body-overflow");
        $("body").attr("margin-right", scrollbarWidth + "px");
        $(".project-wrap").addClass("project-open");
        $(".project-button").attr("margin-right", scrollbarWidth + "px");
    });