SOURCE

console 命令行工具 X clear

                    
>
console
window.onload = function() {
  var imgCon = document.getElementById('imgCon') var baseImgUrl = 'http://lenkuntang.cn/pdf/imgs/000';
  var winH = window.innerHeight;
  var curIdx = 1,
  maxImg = 7;
  generateFirstImg(curIdx++, function() {
    document.getElementById('container').remove() if (imgCon.offsetHeight < winH) {
      generateFirstImg(curIdx++, function() {
        renderRemainImg(curIdx++)
      })
    } else {
      renderRemainImg(curIdx++)
    }
  })

  function generateFirstImg(idx, cb) {
    var img = new Image();
    // img.style.width = '100%';
    img.src = baseImgUrl + idx + '.jpg'img.onload = function() {
      imgCon.appendChild(img) img.style.cssText += 'filter: blur(0px); -webkit-filter: blur(0px); -ms-filter: blur(0px)';
      if (cb) cb()
    }
  }

  function renderRemainImg(idx) {
    var imgDiv = document.createElement('div');
    imgDiv.id = 'imgDiv';
    var j = idx;
    while (j < 8) { (function(tempIdx) {
        var img = new Image();
        img.style.width = '100%';
        img.dataset.imgSrc = tempIdx img.src = baseImgUrl + idx + '.jpg'imgDiv.appendChild(img)
      })(j++)
    }
    imgCon.appendChild(imgDiv) if (imgCon.getBoundingClientRect) {
      var imgRem = document.getElementById('imgDiv').getElementsByTagName('img');
      window.onscroll = function() {
        throttle(function() {
          responsiveImgByBound(imgRem)
        },
        1000, 300)()
      }
    } else {
      window.onscroll = function() {
        responsiveImg(imgRem)
      }
    }
  }

  /**
             * 函数节流方法
             * @param Function fn 延时调用函数
             * @param Number delay 延迟多长时间
             * @param Number atleast 至少多长时间触发一次
             * @return Function 延迟执行的方法
             */
  var throttle = function(fn, delay, atleast) {
    var timer = null;
    var previous = null;

    return function() {
      var now = +new Date();

      if (!previous) previous = now;

      if (now - previous > atleast) {
        fn();
        // 重置上一次开始时间为本次结束时间
        previous = now;
      } else {
        clearTimeout(timer);
        timer = setTimeout(function() {
          fn();
        },
        delay);
      }
    }
  };

  function responsiveImgByBound(imgObj) {
    Array.prototype.forEach.call(imgObj, function(item, idx) {
      var bottomDis = item.getBoundingClientRect().bottom - item.offsetHeight - winH;
      if (bottomDis < 0) {
        item.style.cssText += 'filter: blur(0px); -webkit-filter: blur(0px); -ms-filter: blur(0px)';
        item.src = baseImgUrl + item.dataset.imgSrc + '.jpg';
      }
    })
  }
}
<div class="container" id="container">
  <div class="dot dot-1">
  </div>
  <div class="dot dot-2">
  </div>
  <div class="dot dot-3">
  </div>
</div>
<div style="height: 0px; width: 0px; overflow: hidden;">
  <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
    <defs>
      <filter id="goo">
        <feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur" />
        <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0  0 1 0 0 0  0 0 1 0 0  0 0 0 21 -7"
        />
      </filter>
    </defs>
  </svg>
</div>
<div id="imgCon" class="img-con">
</div>
body,
html {
  width: 100%;
  height: 100%;
  background-color: #fff;
}

.container {
  width: 200px;
  height: 200px;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
  filter: url('#goo');
  animation: rotate-move 2s ease-in-out infinite;
}

.dot {
  width: 70px;
  height: 70px;
  border-radius: 80%;
  background-color: #000;
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}

.dot-3 {
  background-color: #f74d75;
  animation: dot-3-move 2s ease infinite;
}

.dot-2 {
  background-color: #10beae;
  animation: dot-2-move 2s ease infinite;
}

.dot-1 {
  background-color: #ffe386;
  animation: dot-1-move 2s ease infinite;
}

@keyframes dot-3-move {
  20% {
    transform: scale(1)
  }
  45% {
    transform: translateY(-18px) scale(.45)
  }
  60% {
    transform: translateY(-40px) scale(.45)
  }
  80% {
    transform: translateY(-40px) scale(.45)
  }
  100% {
    transform: translateY(0px) scale(1)
  }
}

@keyframes dot-2-move {
  20% {
    transform: scale(1)
  }
  45% {
    transform: translate(-16px, 12px) scale(.45)
  }
  60% {
    transform: translate(-40px, 40px) scale(.45)
  }
  80% {
    transform: translate(-40px, 40px) scale(.45)
  }
  100% {
    transform: translateY(0px) scale(1)
  }
}

@keyframes dot-1-move {
  20% {
    transform: scale(1)
  }
  45% {
    transform: translate(16px, 12px) scale(.45)
  }
  60% {
    transform: translate(40px, 40px) scale(.45)
  }
  80% {
    transform: translate(40px, 40px) scale(.45)
  }
  100% {
    transform: translateY(0px) scale(1)
  }
}

@keyframes rotate-move {
  55% {
    transform: rotate(0deg)
  }
  80% {
    transform: rotate(360deg)
  }
  100% {
    transform: rotate(360deg)
  }
}

.img-con img {
  width: 100%;
  -webkit-transition: filter .3s ease-out 0s;
  -moz-transition: filter .3s ease-out 0s;
  transition: filter .3s ease-out 0s;
  filter: blur(10px);
  -ms-filter: blur(10px);
  -webkit-filter: blur(10px);
}