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

使用JS實(shí)現(xiàn)側(cè)邊欄展開(kāi)和關(guān)閉動(dòng)畫(huà)效果

 更新時(shí)間:2026年01月19日 08:25:44   作者:vmiao  
在很多電商的pc端網(wǎng)頁(yè),我們往往能看到那個(gè)再熟悉不過(guò)的側(cè)邊欄,當(dāng)我們鼠標(biāo)放上去時(shí),它就會(huì)絲滑的彈出一個(gè)內(nèi)容的盒子,當(dāng)你離開(kāi),這個(gè)盒子又像彈簧一樣收縮回去本文我們就要用JS做出這個(gè)簡(jiǎn)單的動(dòng)畫(huà)效果,需要的朋友可以參考下

摘要

在很多電商的pc端網(wǎng)頁(yè),我們往往能看到那個(gè)再熟悉不過(guò)的側(cè)邊欄。當(dāng)我們鼠標(biāo)放上去時(shí),它就會(huì)絲滑的彈出一個(gè)內(nèi)容的盒子,當(dāng)你離開(kāi),這個(gè)盒子又像彈簧一樣收縮回去。接下來(lái)我們就要用JS做出這個(gè)簡(jiǎn)單的動(dòng)畫(huà)效果...

一、緩動(dòng)動(dòng)畫(huà)原理

注:以左右移動(dòng)效果為例

1.首先獲得盒子原始的位置 (盒子要有定位,因?yàn)槭抢煤凶拥膌eft屬性移動(dòng))
2.讓盒子在當(dāng)前位置上移動(dòng)一個(gè)距離
3.添加定時(shí)器setInterval()重復(fù)2中的操作
4.到達(dá)指定位置后清除定時(shí)器 clearInterval

二、代碼實(shí)現(xiàn)

1.首先準(zhǔn)備一個(gè)大盒子,包含一個(gè)span和一個(gè)用來(lái)滑動(dòng)的盒子

<div class = "slider_bar">
    <span>展開(kāi)</span>
    <div class = "con">內(nèi)容</div>
</div>

2.為盒子設(shè)置樣式

.slider_bar{
    position:absolute;
    right:0;
    top:500px;
    width:100px;
    height:100px;
}
.span{
    display:block;
    width:100px;
    height:100px;
    background-color:pink;
}
.con{
    position:absolute;
    left:0;
    top:0;
    width:300px;
    height:100px;
    z-index:-1;
}

因?yàn)閏ss的層疊性,要給.con設(shè)置z-index:-1,把滑動(dòng)盒子放在span下面隱藏起來(lái)

3.寫(xiě)一個(gè)能夠?qū)崿F(xiàn)左右移動(dòng)動(dòng)畫(huà)函數(shù)

function animate(obj,target,callback){
    clearInterval(obj.timer);
    obj.timer = setInterval(function(){
        var step = (target - obj.offsetLeft)/10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step); 
        if(obj.offsetLeft == target){
            clearInterval(obj.timer);
            if(callback){
                callback();
            }
        }
        else{
            obj.style.left = obj.offsetLeft + step + 'px';
        }
    },30)
}

4.綁定顯示和隱藏事件

<script>
    var sliderbar = document.querySelector(".slider_bar");
    var con = document.querySelector(".con");
    sliderbar.addEventListener("mouseenter",function(){
      animate(con,-200,function(){
          sliderbar.children[0].innerHTML = '關(guān)閉';
     ) })  
    }
    sliderbar.addEventListener("mouseleave",function(){
      animate(con,0,function(){
          sliderbar.children[0].innerHTML = '展開(kāi)';
     ) })  
    }
</script> 

三、特別標(biāo)注

1.當(dāng)步長(zhǎng)(step)為正數(shù)時(shí),要向上取整(Math.ceil());為負(fù)數(shù)時(shí),要向下取整(Math.floor())。 2.運(yùn)動(dòng)速度先快后慢,緩動(dòng)效果,用公式:(目標(biāo)位置-現(xiàn)在位置)/10. 3.回調(diào)函數(shù)做參數(shù),callback就相當(dāng)于聲明的函數(shù)體,所以函數(shù)調(diào)用直接寫(xiě)callback();

四、完整代碼示例

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>緩動(dòng)動(dòng)畫(huà)原理</title>
  <style>
      .slider_bar {
          right: 0;
          top: 500px;
          position: absolute;
          width: 100px;
          height: 100px;
      }

      span {
          display: block;
          width: 100px;
          height: 100px;
          background-color: pink;
      }

      .con {
          position: absolute;
          left: 0px;
          top: 0px;
          width: 300px;
          height: 100px;
          background-color: blueviolet;
          z-index: -1;
      }
  </style>
  <script src="/practice1/animate.js"></script>
</head>

<body>
  <div class="slider_bar">
      <span>展開(kāi)</span>
      <div class="con">問(wèn)題反饋</div>
  </div>
  <script>
      var sliderBar = document.querySelector(".slider_bar");
      var con = document.querySelector(".con");
      sliderBar.addEventListener("mouseenter", function () {
          animate(con, -200, function () {
              sliderBar.children[0].innerHTML = '關(guān)閉';
          });
      })
      sliderBar.addEventListener("mouseleave", function () {
          animate(con, 0, function () {
              sliderBar.children[0].innerHTML = '展開(kāi)';
          });
      })
  </script>
</body>

</html>

JS文件

function animate(obj, target, callback) {
    clearInterval(obj.timer);
    obj.timer = setInterval(function () {
        var step = (target - obj.offsetLeft) / 10;
        step = step > 0 ? Math.ceil(step) : Math.floor(step);
        if (obj.offsetLeft == target) {
            clearInterval(obj.timer);
            if (callback) {
                callback();
            }
        }
        else {
            obj.style.left = obj.offsetLeft + step + 'px';
        }
    }, 30)
}

完整代碼示例的前面純手搓,沒(méi)在編輯器里面寫(xiě),如果有錯(cuò)誤希望掘友們幫我指出我再改正!

以上就是使用JS實(shí)現(xiàn)側(cè)邊欄展開(kāi)和關(guān)閉動(dòng)畫(huà)效果的詳細(xì)內(nèi)容,更多關(guān)于JS側(cè)邊欄展開(kāi)和關(guān)閉動(dòng)畫(huà)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

凯里市| 高雄市| 利川市| 华宁县| 儋州市| 扶沟县| 龙陵县| 左权县| 孟津县| 新巴尔虎右旗| 屏边| 武义县| 修文县| 兴仁县| 龙里县| 德昌县| 若尔盖县| 武安市| 朔州市| 阿巴嘎旗| 新巴尔虎右旗| 西林县| 华阴市| 杂多县| 万荣县| 西宁市| 绵竹市| 绥化市| 河源市| 阳东县| 买车| 平度市| 柯坪县| 南岸区| 邢台县| 九江市| 金沙县| 隆尧县| 徐水县| 凌海市| 西丰县|