尝试使用旋转的文本设置元素宽度的动画。
动画在Chrome,IE-11,Safari中看起来很流畅但在FireFox中却很不稳定。
如何使垂直div宽度动画更加流畅干净?
段
function animate() {
var e = document.getElementById('rotbox1');
if (e.style.width == '120px') e.style.width = '200px'; else e.style.width = '120px';
e = document.getElementById('rotbox2');
if (e.style.width == '120px') e.style.width = '200px'; else e.style.width = '120px';
}
animate();
setInterval(animate, 2000);
.wrp-v {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transform-origin: right;
transform-origin: right;
padding-right: 30px;
position: absolute;
right: 30%;
bottom: 20%;
height: 40px;
}
.wrp-h {
padding-right: 30px;
position: absolute;
right: 30%;
bottom: 20%;
height: 40px;
}
.rotbox {
background: green;
color: white;
display: inline-block;
text-align: center;
height: 40px;
width: 200px;
line-height: 40px;
border-radius: 20px;
font-size: 16px;
-webkit-transition: width 2.0s ease;
transition: width 2.0s ease;
}
<div class="wrp-v">
<div class="rotbox" id="rotbox1">Hello world</div>
</div>
<div class="wrp-h">
<div class="rotbox" id="rotbox2">Hello world</div>
</div>
答案 0 :(得分:3)
也许您可以使用writing-mode
代替transform
:
function animate() {
var e = document.getElementById('rotbox1');
if (e.style.height == '120px') e.style.height = '200px';
else e.style.height = '120px';
e = document.getElementById('rotbox2');
if (e.style.width == '120px') e.style.width = '200px';
else e.style.width = '120px';
}
animate();
setInterval(animate, 2000);
.wrp-v {
text-align: center;
-webkit-writing-mode: vertical-lr;
/* old Win safari */
writing-mode: vertical-lr;
writing-mode: tb-lr;
direction: ltr;
padding-right: 30px;
position: absolute;
right: 30%;
bottom: 30%;
}
.wrp-h {
padding-right: 30px;
position: absolute;
right: 30%;
bottom: 20%;
}
.rotbox {
background: green;
color: white;
display: inline-block;
text-align: center;
height: 40px;
line-height: 40px;
border-radius: 20px;
font-size: 16px;
-webkit-transition: width 2.0s ease;
transition: width 2.0s ease;
}
#rotbox1 {
height: 200px;
-webkit-transition: height 2.0s ease;
transition: height 2.0s ease;
}
<div class="wrp-v">
<div class="rotbox" id="rotbox1">Hello world</div>
</div>
<div class="wrp-h">
<div class="rotbox" id="rotbox2">Hello world</div>
</div>
答案 1 :(得分:0)
将rotate(90deg);
更改为rotate(90.3deg);
品牌显得更加顺畅
答案 2 :(得分:0)
使容器固定宽度似乎解决了问题
function animate() {
var e = document.getElementById('rotbox1');
if (e.style.width == '120px') e.style.width = '200px'; else e.style.width = '120px';
e = document.getElementById('rotbox2');
if (e.style.width == '120px') e.style.width = '200px'; else e.style.width = '120px';
}
animate();
setInterval(animate, 2000);
.wrp-v {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transform-origin: right;
transform-origin: right;
padding-right: 30px;
position: absolute;
right: 30%;
bottom: 20%;
height: 40px;
width: 200px; /* new */
}
#rotbox1 { /* new */
position: absolute;
right: 0px;
}
.wrp-h {
padding-right: 30px;
position: absolute;
right: 30%;
bottom: 20%;
height: 40px;
}
.rotbox {
background: green;
color: white;
display: inline-block;
text-align: center;
height: 40px;
width: 200px;
line-height: 40px;
border-radius: 20px;
font-size: 16px;
-webkit-transition: width 2.0s ease;
transition: width 2.0s ease;
}
<div class="wrp-v">
<div class="rotbox" id="rotbox1">Hello world</div>
</div>
<div class="wrp-h">
<div class="rotbox" id="rotbox2">Hello world</div>
</div>
答案 3 :(得分:0)
将.rotbox
设置为position: absolute;
可解决此问题。我不知道为什么。 :)
function animate() {
var e = document.getElementById('rotbox1');
if (e.style.width == '120px') e.style.width = '200px'; else e.style.width = '120px';
}
animate();
setInterval(animate, 2000);
.wrp-v {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
-webkit-transform-origin: right;
transform-origin: right;
padding-right: 30px;
position: absolute;
right: 30%;
top: 20%;
height: 40px;
}
.rotbox {
position: absolute;
background: green;
color: white;
display: inline-block;
text-align: center;
height: 40px;
width: 200px;
line-height: 40px;
border-radius: 20px;
font-size: 16px;
-webkit-transition: width 2.0s ease;
transition: width 2.0s ease;
text-rendering: optimizeLegibility;
}
<div class="wrp-v">
<div class="rotbox" id="rotbox1">Hello world</div>
</div>