打开和关闭固定div

时间:2013-06-19 08:27:12

标签: javascript jquery jquery-animate

我的页面右侧有一个固定的div,如下所示:

enter image description here

这是我的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);
})

但我总是有这样的结果: enter image description here

我怎样才能确定我什么也看不见了? (我认为它与填充有关...)

4 个答案:

答案 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);

.outerWidthwidth+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);