Javascript的offsetWidth不适用于Safari

时间:2017-09-15 01:03:50

标签: javascript safari cross-browser polyfills

我在页面中间有一个div,它在页面滚动页面菜单下面变得很粘。问题是使用offsetWidth不会在Safari中为相应的div添加任何宽度,因此粘性div的宽度不适应屏幕大小。

我在网上进行了搜索并看到了一些建议和黑客(例如:this link),但是在我的案例中没有一个真正起作用。

由于所有浏览器都支持offsetWidth,我不明白为什么Safari有任何问题。代码如下:

JS:

const scheduleControls = document.querySelector('.schedule-controls');
const wrap = document.querySelector('.schedule-controls-wrapper');

function fixControls(){
        const scrollTop = document.body.scrollTop;
        const wrapOffsetTop = wrap.offsetTop;
         if((document.querySelector('.section-live').offsetTop - 240) <= scrollTop) {
          scheduleControls.classList.remove('fixed');
          scheduleControls.style = '';
        } else  if (scrollTop + document.querySelector('.js_site-header').offsetHeight >= wrapOffsetTop) {
          scheduleControls.classList.add('fixed');
          scheduleControls.style = `width:${wrap.offsetWidth}px;`;
        } else {
          scheduleControls.classList.remove('fixed');
          scheduleControls.style = '';
        }
      }

CSS:

.schedule-controls {
  display: flex;
  height: 70px;
  transition: all 0.125s ease;

  &.fixed {
    position: fixed;
    top: 60px;
    height: 80px;
    border-top: 10px solid $white;
    background: $white;

    @media (min-width: $bp-m){
      top: 162px;
    }
}

HTML:

            <div class="schedule-loading-wrapper js_schedule-loading-wrapper hidden">
                <div class="schedule-controls-wrapper" id="scheduleControlsWrapper">
                    <div class="schedule-controls">
    </div>
</div>

1 个答案:

答案 0 :(得分:0)

我已经改变了

scheduleControls.style = `width:${wrap.offsetWidth}px;`;

scheduleControls.style.width = wrap.offsetWidth + "px";

现在它适用于Safari和所有其他浏览器。