鍍金池/ 問答/HTML5  HTML/ fadeIn效果,當(dāng)scroll 到該物件時(shí),但假設(shè)該物件有定位,則會(huì)錯(cuò)誤

fadeIn效果,當(dāng)scroll 到該物件時(shí),但假設(shè)該物件有定位,則會(huì)錯(cuò)誤

var eles = Array.prototype.slice.call(document.querySelectorAll('.animated'));
document.addEventListener('scroll', animatedFadeInUp);
animatedFadeInUp();

function animatedFadeInUp() {
  eles = eles.filter(function(ele) {
    var rect = getRect(ele);
    if (rect.isVisible) {
      ele.classList.add('slideUp');
      return false;
    }
    return true;
  });
  if (eles.length <= 0) document.removeEventListener('scroll', animatedFadeInUp);
}

function getRect(ele) {
  var inHeight = window.innerHeight;
  var rect = ele.getBoundingClientRect();
  rect.isVisible = rect.top - inHeight < 0;
  // rect.isBottom = rect.bottom - inHeight <= 0;
  return rect;
}

如果物件沒有定位(position),則不會(huì)被影響
但是假設(shè)有定位,他會(huì)先移動(dòng)到一個(gè)很怪的角度,之後才會(huì)變回去該有的位置

@keyframes slideUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 20%, 0);
    transform: translate3d(0, 20%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}

因?yàn)槲业膭?dòng)畫有 transform,
我定位的時(shí)候也是用transform
就像是:

position: absolute;
left:15px;
top:50%;
transform: translate(0,-50%);
-webkit-transform: translate(0,-50%);

要如何做到:即便有定位,也能夠使用這個(gè)動(dòng)畫?!且會(huì)到正確位置?

回答
編輯回答
撥弦

確實(shí)是同一個(gè)transform導(dǎo)致的,動(dòng)畫過程中先會(huì)回到20%的地方,

其實(shí)你的20%對應(yīng)到現(xiàn)在的話,其實(shí)就是-50 + 20 = -30%,相應(yīng)的結(jié)束為止也需要改成(0, -50%, 0)

2017年11月3日 13:20