我有3 divs
彼此相邻,背景div
。我们会调用背景div
bg div
。每当选择3个divs
中的一个时,bg div
就会位于所选div
之上。 (基本上,类似于分段控制器。)
当我尝试将bg div
转换到新位置时。我做了以下过渡:
transition: left linear .2s;
第一次选择div
时,动画不会发生,但bg div
确实会移动到正确的位置(只是没有动画)。在第二次点击之后,它会起作用。
如何向bg div
添加转换?
$('.inner').click(function() {
var pos = $(this).position();
$("#back").css('left', pos.left + "px");
});

#wrapper {
width: 600px;
height: 30px;
position: relative;
}
.inner {
display: block;
float: left;
width: calc(100% / 3);
height: 50px;
}
#back {
background-color: yellow;
height: 100%;
z-index: -1;
width: calc(100% / 3);
position: relative;
transition: left linear 1s;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div class="inner">First Option</div>
<div class="inner">Second Option</div>
<div class="inner">Third Option</div>
<div id="back"></div>
</div>
&#13;
答案 0 :(得分:1)
要使转换生效,应该定义一个初始值,动画将从该初始值开始。
此处#back
没有初始left
值,因为在第一次点击时,它会直接跳转到点击时定义的left
位置。
这将是下一次转换的初始值,因此从那时起您将看到转换中的动画。
所以您需要做的就是在left:0px;
的css中添加#back
。
希望这会有所帮助。
答案 1 :(得分:0)
您应该为css left: 0;
#back
属性
$('.inner').click(function() {
var pos = $(this).position();
$("#back").css('left', pos.left + "px");
});
&#13;
#wrapper {
width: 600px;
height: 30px;
position: relative;
}
.inner {
display: block;
float: left;
width: calc(100% / 3);
height: 50px;
}
#back {
background-color: yellow;
height: 100%;
z-index: -1;
width: calc(100% / 3);
position: relative;
transition: left linear 1s;
left: 0;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="wrapper">
<div class="inner">First Option</div>
<div class="inner">Second Option</div>
<div class="inner">Third Option</div>
<div id="back"></div>
</div>
&#13;