最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Javascript 實(shí)現(xiàn)全屏滾動實(shí)例代碼

 更新時間:2016年12月31日 09:09:58   投稿:lqh  
這篇文章主要介紹了Javascript 實(shí)現(xiàn)全屏滾動實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下

JS 全屏滾動

參照fullPage.js的效果,用自己的想法實(shí)現(xiàn)的。

實(shí)現(xiàn)的效果:1、全屏滾動,滾動一下齒輪就會滾動全屏。

2、自適應(yīng)縮放,無論怎么改變窗口的大小,都會保證用一個元素占滿全屏。

下一步計劃:

1、改成react組件

2、實(shí)現(xiàn)更多的效果

注釋寫的很清楚,基本上知道函數(shù)怎么用就可以了。有想法這東西就很簡單。

這里偷懶使用了我之前寫過的一個運(yùn)動框架(其實(shí)就是一個函數(shù)),稍加修改就可以在這上面使用??蚣芟嚓P(guān):點(diǎn)擊這里

注釋非常詳細(xì)了,就不說其他的了。直接上代碼:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>index</title>
</head>
<style>
  *{
    margin: 0;
    padding: 0;
  }
  div{
    width: 100%;
    height: 100%;
  }
  .one{
    background-color: #1bbc9b;
  }
  .sec{
    background-color: #4bbfc3;
  }
  .thr{
    background-color: #7baabe;
  }
</style>
<body>
  <div class="full one">1</div>
  <div class="full sec">2</div>
  <div class="full thr">3</div>
</body>
<script>
//添加滾動監(jiān)聽
document.addEventListener('mousewheel',wheel,false);

//判斷一次滾動是是否完成
var isComplete = true;
//隱藏滾動條
document.body.style.overflow='hidden';

//獲取滾動的元素
var fullList = document.getElementsByClassName("full");

//因為是類數(shù)組對象,不是數(shù)組對象,所以只能使用call的方式來調(diào)用
Array.prototype.forEach.call(fullList,function(value){
  //獲取一個網(wǎng)頁滿屏的高
  value.style.height = window.innerHeight +'px';
})

//如果窗口大小改變執(zhí)行的函數(shù)
window.onresize = function(){
  Array.prototype.forEach.call(fullList,function(value){
    value.style.height = window.innerHeight +'px';
  });

  //改變窗口大小后,應(yīng)該仍是一個元素占滿全屏
  if(document.body.scrollTop % window.innerHeight)
  {
    isComplete = false;
    //根據(jù)四舍五入判斷滾動位置
    let tmp = Math.round(document.body.scrollTop / window.innerHeight)* window.innerHeight;
    
    //使用運(yùn)動框架
    showAnimate(document.body,{'scrollTop':tmp},function(){
        isComplete = true;
    });
  }
};

//滾動函數(shù)
function wheel(e){
  //等待上一個滾動完成
  if(isComplete){

    //滾動進(jìn)行時
    isComplete = false;

    //判斷是往上滾動還是往下滾動
    if(e.wheelDelta < 0){
      //要滾動到的點(diǎn)
      let arrivePoint = document.body.scrollTop + window.innerHeight;

      //最大的滾動點(diǎn)
      let maxBottom = document.body.offsetHeight - window.innerHeight;
      
      //如果超出了最大的滾動點(diǎn),則賦值為最大滾動點(diǎn)
      arrivePoint = arrivePoint > maxBottom ? maxBottom : arrivePoint;

      showAnimate(document.body,{'scrollTop':arrivePoint},function(){
        isComplete = true;
      });
    }else{
      let arrivePoint = document.body.scrollTop - window.innerHeight;
      
      //最小滾動點(diǎn)為0
      arrivePoint = arrivePoint < 0 ? 0 :arrivePoint; 
      showAnimate(document.body,{'scrollTop':arrivePoint},function(){
        isComplete = true;  
      });
    }
  }
}
/**
*函數(shù)作用:執(zhí)行動畫
*接受參數(shù):obj(需要運(yùn)動的DOM元素)
*    json(需要改變的屬性集合,json格式)
*    fn(回調(diào)函數(shù))
*/
function showAnimate(obj,json,fn){
  clearInterval(obj.timer);
  //表示運(yùn)動是否都已經(jīng)停止
  var flag = true;
  obj.timer=setInterval(function(){
    //循環(huán)json
    for(var i in json){
       if(i == 'opacity'){
         //獲取透明度值,round四舍五入去除小數(shù)點(diǎn)
         var icur = Math.round(parseFloat(getStyle(obj,i))*100);
       }
       else{
         //獲取屬性值
         var icur = parseInt(getStyle(obj,i))||obj[i];
       }
       //緩沖運(yùn)動,speed隨時變換
      var speed = (json[i]-icur)/10;//千萬要寫在定時器里面,寫在外面會有意想不到的后果
      speed = speed > 0 ? Math.ceil(speed):Math.floor(speed);//速度向上或者下取整,防止到不了over位置
      //如果有一個沒到達(dá)終點(diǎn)就是false
      if(json[i] !== icur){
        flag = false;
      }else{
        flag = true;
      }
      if(i == 'opacity'){
        obj.style.filter = 'alpha(opacity:'+(icur+speed)+')';//IE兼容
        obj.style.opacity = (icur+speed)/100;
      }else if(obj[i]||obj[i] == 0){
        obj[i] = icur + speed;
      }
      else{
        obj.style[i] = icur+speed+'px';
      }
      console.log(icur + ' ' + json[i]);
    }
    //檢查是否所有的運(yùn)動都已經(jīng)停止
    if(flag){
      clearInterval(obj.timer);
      if(fn){
        fn();
      }
    }
  },13);
}
/**
*函數(shù)作用:返回樣式屬性值
*接受參數(shù):obj(需要獲取屬性的DOM元素)
*      attr(需要獲取的屬性名稱)
*/
function getStyle(obj,attr)
{
  if(obj.currentStyle)
  {
    return obj.currentStyle[attr];//IE兼容
  }
  else
  {
    return getComputedStyle(obj,false)[attr];
  }
}
</script>
</html>

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

最新評論

贡山| 河池市| 仁寿县| 灵石县| 阜康市| 永德县| 正安县| 中卫市| 洛南县| 永新县| 二手房| 娄底市| 神池县| 安丘市| 兴仁县| 扎兰屯市| 井研县| 金山区| 新安县| 马关县| 马公市| 五大连池市| 衡山县| 遵义市| 德保县| 五寨县| 无极县| 道真| 额敏县| 汤阴县| 甘孜| 景宁| 鹿邑县| 宜春市| 百色市| 钦州市| 日土县| 双牌县| 城市| 广昌县| 琼结县|