我的页面右侧有一个固定的div,如下所示:
这是我的HTML:
<a id="toggle" class="open"><img src="_styles/images/open_close.png" alt="openclose" /></a>
<div class="tweetdetails" style="width: 0px;">
<p class="screenname">@BachelorGDM</p><br>
<img src="linktoimage" alt="image_user"><br>
<p class="createdon">Created on: Mar 8, 2013</p><br>
<hr>
<p class="text">Here is some text</p>
</div>
这是我的CSS:
.tweetdetails{
color:white;
padding:10px 50px;
position: fixed;
right:0px;
width:300px;
z-index: 999;
background-color: #FFF;
height:100%;
background-color: black;
border-left: 5px solid rgb(127,255,255);
}
.open{
background-repeat: no-repeat;
background-size: 50px auto;
color:red;
position: fixed;
right:400px;
top:50%;
}
在我的Javascript中我有:
$("#toggle").click(function(){
$(".tweetdetails").animate({width:'0px'}, 500);
$("#toggle").animate({right: "-=300"}, 500);
})
但我总是有这样的结果:
我怎样才能确定我什么也看不见了? (我认为它与填充有关...)
答案 0 :(得分:2)
如果你懒惰,请检查小提琴;)http://jsfiddle.net/tbleckert/UERHX/
那是因为你的填充会使div为400px而不是300px。您可以为div添加box-sizing并添加一些额外的宽度,如下所示:
.tweetdetails {
box-sizing: border-box;
width: 400px; // Since we added box-sizing
}
框大小将确保div保持您定义的宽度。然后将切换器的右侧动画设为-400px。记得将供应商前缀添加到box-sizing(-moz和-webkit)。
但是!问题仍然存在,所以我建议动画正确的属性而不是宽度。这将有效。
我建议你把#toggle放在.tweetdetails里,把它放在外面。这样你只需要制作一个动画,因为#toggle将会跟随。你也可以通过添加一个类来实现css过渡。
.tweetdetails {
right: -400px;
transition: 0.5s right; // Add vendor prefixes
}
.tweetdetails.open {
right: 0;
}
$('#toggle').click(function () {
$('.tweetdetails').toggleClass('open');
});
我向你展示了我的意思:http://jsfiddle.net/tbleckert/UERHX/
作为旁注,你不应该在你的CSS中使用ID,但你应该在你的javascript中使用它们。将ID添加到您知道将在脚本中使用的元素是一个很好的做法(只是不要发疯,有时应用几个元素,它们应该是类,以便它们可以很容易地循环)。
答案 1 :(得分:2)
你可以让它更具动感,没有幻数:
$(".tweetdetails").animate({width:'0px' , padding:'0px'}, 500);
$("#toggle").animate({right: "-=" + ( $(".tweetdetails").outerWidth() ) }, 500);
.outerWidth
为width+padding+border
,请查看:http://api.jquery.com/outerWidth/
(已编辑,感谢@tbleckert)
答案 2 :(得分:1)
我想这就是你想要的: http://jsfiddle.net/balintbako/XJbqD/
<a id="toggle" class="open"><img src="_styles/images/open_close.png" alt="openclose" /></a>
<div class="tweetdetails" style="width: 0px;">
<p class="screenname">@BachelorGDM</p>
<br/>
<img src="linktoimage" alt="image_user"></img>
<br/>
<p class="createdon">Created on: Mar 8, 2013</p>
<br/>
<hr/>
<p class="text">Here is some text</p>
</div>
CSS
.tweetdetails {
color:white;
position: fixed;
right:0px;
z-index: 999;
background-color: #FFF;
height:100%;
background-color: black;
border-left: 5px solid rgb(127, 255, 255);
}
.open {
background-repeat: no-repeat;
background-size: 50px auto;
color:red;
position: fixed;
right:5px;
top:50%;
}
JS
$("#toggle").click(function () {
if ($("#toggle").hasClass("opened")) {
$(".tweetdetails").animate({
width: '0px',
padding: '0px'
}, 500);
$("#toggle").animate({
right: "-=" + 400
}, 500);
} else {
$(".tweetdetails").animate({
width: '300px',
padding: '10px 50px'
}, 500);
$("#toggle").animate({
right: "+=" + 400
}, 500);
}
$("#toggle").toggleClass("opened");
});
答案 3 :(得分:0)
$(".tweetdetails").css('padding', '10px 0').animate({width:'0px'}, 500);