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

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

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

JS 全屏滾動(dòng)

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

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

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

下一步計(jì)劃:

1、改成react組件

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

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

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

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

<!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>
//添加滾動(dòng)監(jiān)聽(tīng)
document.addEventListener('mousewheel',wheel,false);

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

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

//因?yàn)槭穷悢?shù)組對(duì)象,不是數(shù)組對(duì)象,所以只能使用call的方式來(lái)調(diào)用
Array.prototype.forEach.call(fullList,function(value){
  //獲取一個(gè)網(wǎng)頁(yè)滿屏的高
  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)該仍是一個(gè)元素占滿全屏
  if(document.body.scrollTop % window.innerHeight)
  {
    isComplete = false;
    //根據(jù)四舍五入判斷滾動(dòng)位置
    let tmp = Math.round(document.body.scrollTop / window.innerHeight)* window.innerHeight;
    
    //使用運(yùn)動(dòng)框架
    showAnimate(document.body,{'scrollTop':tmp},function(){
        isComplete = true;
    });
  }
};

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

    //滾動(dòng)進(jìn)行時(shí)
    isComplete = false;

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

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

      showAnimate(document.body,{'scrollTop':arrivePoint},function(){
        isComplete = true;
      });
    }else{
      let arrivePoint = document.body.scrollTop - window.innerHeight;
      
      //最小滾動(dòng)點(diǎn)為0
      arrivePoint = arrivePoint < 0 ? 0 :arrivePoint; 
      showAnimate(document.body,{'scrollTop':arrivePoint},function(){
        isComplete = true;  
      });
    }
  }
}
/**
*函數(shù)作用:執(zhí)行動(dòng)畫
*接受參數(shù):obj(需要運(yùn)動(dòng)的DOM元素)
*    json(需要改變的屬性集合,json格式)
*    fn(回調(diào)函數(shù))
*/
function showAnimate(obj,json,fn){
  clearInterval(obj.timer);
  //表示運(yùn)動(dòng)是否都已經(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)動(dòng),speed隨時(shí)變換
      var speed = (json[i]-icur)/10;//千萬(wàn)要寫在定時(shí)器里面,寫在外面會(huì)有意想不到的后果
      speed = speed > 0 ? Math.ceil(speed):Math.floor(speed);//速度向上或者下取整,防止到不了over位置
      //如果有一個(gè)沒(méi)到達(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)動(dòng)都已經(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>

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

相關(guān)文章

最新評(píng)論

凤庆县| 霍林郭勒市| 涡阳县| 平谷区| 泰安市| 吴忠市| 澄迈县| 赫章县| 忻城县| 绥棱县| 静乐县| 马龙县| 文登市| 海淀区| 平南县| 巴彦淖尔市| 山东省| 五原县| 海南省| 新邵县| 扎赉特旗| 北辰区| 余庆县| 集贤县| 通江县| 宁安市| 衡山县| 墨脱县| 元氏县| 巴林左旗| 新田县| 阳山县| 改则县| 彩票| 宁国市| 衡南县| 浏阳市| 绵竹市| 东兰县| 南华县| 福贡县|