简体   繁体   English

使用切换按钮为div滑动动画制作动画

[英]Animate a div sliding with a toggle button

I can't seem to figure out how to animate my div sliding with a toggle button. 我似乎无法弄清楚如何使用切换按钮为div滑动动画。

I tried using variables but I have multiple of these and I am creating too many variables to keep track of the clicks on each of them. 我尝试使用变量,但是有多个变量,而且我创建的变量太多,无法跟踪每个变量的点击次数。

 $(document).ready(function() { $('#toggle-sidebar').click(function() { $('#sidebar').animate({ left: '200' }, 500); }); }); 
 #sidebar { position: absolute; top: 0; left: 0; width: 20em; height: 70vh; background:#333; } #toggle-sidebar { float: right; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="sidebar"></div> <a href="#" id="toggle-sidebar">Toggle</a> 

Please note that this method uses CSS transitions, and is not supported by IE9 and older. 请注意,此方法使用CSS过渡,IE9和更早版本不支持此方法。 If that's a concern for you, keep using jQuery to animate your divs, and save their state by toggling a class on them. 如果您对此感到担心,请继续使用jQuery为div设置动画,并通过在其上切换类来保存其状态。

If you have multiple div s to move, use classes instead of IDs. 如果要移动多个div ,请使用类而不是ID。 And toggle a class on them: 并在它们上切换一个类:

 $('.toggle-sidebar').click(function() { $(this).next().toggleClass('moved'); }); 
 .sidebar { position: relative; left: 0; width: 20px; height: 20px; background: #333; -webkit-transition: left .5s ease; transition: left .5s ease; } .sidebar.moved { left: 200px; } .toggle-sidebar { float: right; margin-right: 90px; cursor: pointer; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="toggle-sidebar">Toggle</div> <div class="sidebar"></div> <div class="toggle-sidebar">Toggle</div> <div class="sidebar"></div> <div class="toggle-sidebar">Toggle</div> <div class="sidebar"></div> <div class="toggle-sidebar">Toggle</div> <div class="sidebar"></div> 

Use Css animations instead... here an example: http://jsfiddle.net/leojavier/mag4eamz/ 请改用Css动画...这里是一个示例: http : //jsfiddle.net/leojavier/mag4eamz/

<div id="sidebar" class="primary-menu-show"></div>
<a href="#" id="toggle-sidebar">Toggle</a>

JS JS

$('#toggle-sidebar').click(function() {
   $('#sidebar').toggleClass('primary-menu-hide')
});

CSS 的CSS

#sidebar {
  width: 20em;
  height: 70vh;
  background:#333;
}

#toggle-sidebar {
  float: none;
}


.primary-menu-show {
    -moz-animation: primary-menu-show 0.4s;
    -o-animation: primary-menu-show 0.4s;
    -webkit-animation: primary-menu-show 0.4s;
    animation: primary-menu-show 0.4s;
    -moz-animation-timing-function: ease-out;
    -o-animation-timing-function: ease-out;
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
    -moz-animation-fill-mode: forwards;
    -o-animation-fill-mode: forwards;
    -webkit-animation-fill-mode: forwards;
    animation-fill-mode: forwards;
}

@keyframes primary-menu-show {
    from {
        -moz-transform: translateX(-250px);
        -ms-transform: translateX(-250px);
        -o-transform: translateX(-250px);
        -webkit-transform: translateX(-250px);
        transform: translateX(-250px);
    }

    to {
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        -o-transform: translateX(0);
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }
}

@-moz-keyframes primary-menu-show {
    from {
        -moz-transform: translateX(-250px);
        -ms-transform: translateX(-250px);
        -o-transform: translateX(-250px);
        -webkit-transform: translateX(-250px);
        transform: translateX(-250px);
    }

    to {
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        -o-transform: translateX(0);
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }
}

@-webkit-keyframes primary-menu-show {
    from {
        -moz-transform: translateX(-250px);
        -ms-transform: translateX(-250px);
        -o-transform: translateX(-250px);
        -webkit-transform: translateX(-250px);
        transform: translateX(-250px);
    }

    to {
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        -o-transform: translateX(0);
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }
}

.primary-menu-hide {
    -moz-animation: primary-menu-hide 0.4s;
    -o-animation: primary-menu-hide 0.4s;
    -webkit-animation: primary-menu-hide 0.4s;
    animation: primary-menu-hide 0.4s;
    -moz-animation-timing-function: ease-out;
    -o-animation-timing-function: ease-out;
    -webkit-animation-timing-function: ease-out;
    animation-timing-function: ease-out;
    -moz-animation-fill-mode: forwards;
    -o-animation-fill-mode: forwards;
    -webkit-animation-fill-mode: forwards;
    animation-fill-mode: forwards;
}

@keyframes primary-menu-hide {
    from {
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        -o-transform: translateX(0);
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }

    to {
        -moz-transform: translateX(-250px);
        -ms-transform: translateX(-250px);
        -o-transform: translateX(-250px);
        -webkit-transform: translateX(-250px);
        transform: translateX(-250px);
    }
}

@-moz-keyframes primary-menu-hide {
    from {
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        -o-transform: translateX(0);
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }

    to {
        -moz-transform: translateX(-250px);
        -ms-transform: translateX(-250px);
        -o-transform: translateX(-250px);
        -webkit-transform: translateX(-250px);
        transform: translateX(-250px);
    }
}

@-webkit-keyframes primary-menu-hide {
    from {
        -moz-transform: translateX(0);
        -ms-transform: translateX(0);
        -o-transform: translateX(0);
        -webkit-transform: translateX(0);
        transform: translateX(0);
    }

    to {
        -moz-transform: translateX(-250px);
        -ms-transform: translateX(-250px);
        -o-transform: translateX(-250px);
        -webkit-transform: translateX(-250px);
        transform: translateX(-250px);
    }
}

Here is a functional sample: http://jsfiddle.net/leojavier/mag4eamz/ 这是一个功能示例: http : //jsfiddle.net/leojavier/mag4eamz/

Ok, let's use variables. 好的,让我们使用变量。

 $(document).ready(function() { var isLeft = false, sideBar = $('#sidebar'); $('#toggle-sidebar').click(function() { if (isLeft) { sideBar.animate({ left: '0' }, 500).promise().done(function() { isLeft = false; }); } else { sideBar.animate({ left: '200' }, 500).promise().done(function() { isLeft = true; }); } }); }); 
 #sidebar { position: absolute; top: 0; left: 0; width: 20em; height: 70vh; background: #333; } #toggle-sidebar { float: right; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="sidebar"></div> <a href="#" id="toggle-sidebar">Toggle</a> 

(document).ready(function() {

$('#toggle-sidebar').click(function() {
    if($("#sidebar").hasClass("animated")) {
        $("#sidebar").removeClass("animated") ;
        $('#sidebar').animate({
        left: '0'
        }, 500);
    } else {

        $('#sidebar').animate({
        left: '200'
        }, 500);
        $("#sidebar").addClass("animated") ;

    }
});

});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM