2

我的页面右侧有一个固定的 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);
})

但我总是有这样的结果: 在此处输入图像描述

我怎样才能确保我什么都看不见了?(我认为这与填充有关......)

4

4 回答 4

2

如果你很懒,请检查小提琴;)http://jsfiddle.net/tbleckert/UERHX/

那是因为您的填充将使 div 宽 400 像素而不是 300 像素。您可以将 box-sizing 添加到您的 div 并添加一些额外的宽度,如下所示:

.tweetdetails {
  box-sizing: border-box;
  width: 400px; // Since we added box-sizing
}

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 添加到您知道将在脚本中使用的元素是一个很好的做法(只是不要发疯,有时会应用多个元素,它们应该是类,以便可以轻松循环)。

于 2013-06-19T08:30:26.040 回答
2

你可以让它更动态,没有幻数:

 $(".tweetdetails").animate({width:'0px' , padding:'0px'}, 500);
 $("#toggle").animate({right: "-=" + ( $(".tweetdetails").outerWidth() ) }, 500);

.outerWidthwidth+padding+border,看看:http
: //api.jquery.com/outerWidth/(编辑,感谢@tbleckert)

于 2013-06-19T08:32:17.020 回答
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");
});
于 2013-06-19T08:59:14.827 回答
0
    $(".tweetdetails").css('padding', '10px 0').animate({width:'0px'}, 500);
于 2013-06-19T08:36:21.743 回答