关于切换开关的动画

时间:2015-03-17 15:03:22

标签: jquery css animation

我正在尝试为我的可切换开关添加动画,但无法弄清楚它是如何工作的。我试图让它在点击时滑到是或否。基于我的在线阅读,我不确定这种类型的html设置是否可以实现动画。

HTML:

<div class="rds-toggle-switch">
<div class="rds-toggle">
    <label>
       <input type="radio" name="toggle" checked/>
       <div class="rds-toggle-header input-checked">Yes</div>
   </label>    
 </div>
    <div class="rds-toggle">
        <label>
            <input type="radio" name="toggle"/>
            <div class="rds-toggle-header">No</div>
        </label>
    </div>
</div>

CSS:

.rds-toggle-switch{
    background: #ebebeb;
    padding-left: 2px;
    border: 1px solid #898989;
    border-radius: 3px;
}

.rds-toggle {
    margin-bottom: 1px;
    margin-top: 2px;
    display: inline-block;
    color: blue;
    width: calc(50% - 3px);
}

.rds-toggle label {
    width: 100%;
}

.rds-toggle label .rds-toggle-header {
    text-align:center;
    cursor: pointer;
    height:36px;
    padding: 6px;
}

.rds-toggle label .rds-toggle-subtext{
    font-size: .7857142857em;
    color: #ccc;
    line-height: 0.8;
    font-weight: 300;
}

.rds-toggle label input {
    position:absolute;
    top:-20px;
}

.rds-toggle .input-checked {
    border-radius: 3px;
    color:#000;
    border: 1px solid #2e51a1;
    background-color: white;
}

JS:

$('.rds-toggle').click(function(){
    var $ele = $(this);
    $ele.children('label').children('div').addClass('input-checked');
    $ele.siblings('.rds-toggle').children('label').children('div').removeClass('input-checked');
    $ele.children('label').children('input').prop('checked', true);
});

http://jsfiddle.net/cou1u6us/

3 个答案:

答案 0 :(得分:1)

你不能制作这样的幻灯片因为你使用了两个不同的元素 - 基本上,你需要一种变形,所以当一个元素开始离开该区域时,另一个元素开始出现,等等。它可能会变得复杂。

相反,我建议您使用单个元素来表示活动开关状态,类似于此 - 它使用绝对定位的“开关状态”(#rds-state)元素,该元素使用CSS过渡动画(为其{{设置动画1}} property):

left
$('.rds-toggle').click(function() {
  var $ele = $(this);
  $('#rds-state').css('left', $ele[0].offsetLeft);
  $ele.children('label').children('div').addClass('input-checked');
  $ele.siblings('.rds-toggle').children('label').children('div').removeClass('input-checked');
  $ele.children('label').children('input').prop('checked', true);
});
.rds-toggle-switch {
  background: #ebebeb;
  padding-left: 2px;
  border: 1px solid #898989;
  border-radius: 3px;
}
.rds-toggle {
  margin-bottom: 1px;
  margin-top: 2px;
  display: inline-block;
  color: blue;
  width: calc(50% - 3px);
}
.rds-toggle label {
  width: 100%;
}
.rds-toggle label .rds-toggle-header {
  text-align: center;
  cursor: pointer;
  height: 36px;
  padding: 6px;
  position: relative;
}
.rds-toggle label .rds-toggle-subtext {
  font-size: .7857142857em;
  color: #ccc;
  line-height: 0.8;
  font-weight: 300;
}
.rds-toggle label input {
  position: absolute;
  top: -20px;
}
.rds-toggle .input-checked {
  color: #000;
}
#rds-state {
  border-radius: 3px;
  color: #000;
  border: 1px solid #2e51a1;
  background-color: white;
  height: 48px;
  width: calc(50% - 15px);
  position: absolute;
  left: 11px;
  transition: left 0.2s linear;
}

答案 1 :(得分:0)

如果您在项目中使用jquery mobile 1.4,那么jQuery mobile有一个很棒的Flipswitch可以满足您的需求。

示例:

http://jsfiddle.net/cou1u6us/9/

jQuery Mobile JS包括

http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.js

HTML

<div class="rds-toggle-switch">  
    <div data-role="fieldcontain">
        <label for="checkbox-based-flipswitch">Checkbox-based:</label>
        <input type="checkbox" name="toggle" id="checkbox-based-flipswitch" data-role="flipswitch">
    </div>
</div>

答案 2 :(得分:0)

你可以制作幻灯片。它们是独立的元素并不重要。只需要一个附加到其中一个盒子的psuedo元素来回滑动。换句话说......

<input type="radio" id="yes" name="test" value="Yes" checked>
<label for="yes">Yes</label>
<input type="radio" id="no" name="test" value="No">
<label for="no">No</label>

然后是一点CSS

input[type="radio"]{
  position:absolute;
  height:0px;
  width:0px;
}
input[type="radio"]:checked + label{
  font-style:italic;  
}
label{
  font-size:30px;  
}
#yes::before{
  content:"";
  height:30px;
  width:45px;
  position:absolute;
  left:-5px;
  top:0;
  opacity:1;
  background-color:rgba(0,0,0,.5); 
  transform:translateX(100%);
  transition:transform .4s ease-in;
}
#yes:checked::before{
  transform:translateX(0);  
}

我在这里有一支笔http://codepen.io/pocketg99/pen/KwreLd

当您提交表单时,一切都将按预期运行。