【问题标题】:Dynamically change elements offset basing on it's own size and current offset根据自己的大小和当前偏移量动态更改元素偏移量
【发布时间】:2017-05-04 14:07:04
【问题描述】:

我在 DIV 中有一个元素。如下图...

<div id="parent">
    <div id="child"></div>
</div>

通常在孩子改变大小(缩放)时将孩子居中放在父母中间,我会这样做......

$('#child').resizable({
        resize:function(){
            // this extends the left/top offset while width increases
            $('#child').css({
                left:$('#parent').width()/2 - $('#child').width()/2,
                top:$('#parent').height()/2 - $('#child').height()/2
            })
        }
    });

上面的例子工作得很好,但是当我调整孩子的大小时,它总是从同一个点开始,而不是孩子的偏移量。

但是现在我需要像上面的示例一样调整孩子的左上角偏移量,但这次不是基于父级的大小而是基于孩子的确切偏移量及其大小。

【问题讨论】:

  • 我的回答中是否缺少某些内容我可以添加或调整以供您接受?
  • 我给了你一票,但你的答案是基于 CSS 的,我需要一个 JavaScript 解决方案。我终于通过增加元素宽度然后通过将宽度差添加到当前左侧来调整它的左偏移来得到它。这可以保证在每个浏览器中都能正常工作。

标签: javascript jquery html css


【解决方案1】:

我建议你使用transformtransform-origin

transform 使用它所应用的元素自己的属性,而不是父元素。

CSS 悬停

#parent {
  height: 200px;
  background: lightgray;
}
#child {
  position: relative;
  top: 50%;
  left: 50%;
  width: 100px;
  padding: 30px;
  background: red;
  text-align: center;
  transition: transform 0.5s;
  transform: translate(-50%,-50%);
  transform-origin: center top;        /* which origin to scale from */
}
#child:hover {
  transform: translate(-50%,-50%) scale(1.5);
}
<div id="parent">
    <div id="child">Hover me</div>
</div>

jQuery 悬停

$(document).ready(function() {
  $("#child").hover(function() {
    $(this).css("transform", "translate(-50%,-50%) scale(1.5)");
  }, function() {
    $(this).css("transform", "translate(-50%,-50%)");
  });
});
#parent {
  height: 200px;
  background: lightgray;
}

#child {
  position: relative;
  top: 50%;
  left: 50%;
  width: 100px;
  padding: 30px;
  background: red;
  text-align: center;
  transition: transform 0.5s;
  transform: translate(-50%, -50%);
  transform-origin: center top;          /* which origin to scale from */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="parent">
  <div id="child">Hover me</div>
</div>

【讨论】:

  • 现在我将如何在 JavaScript 中务实地做到这一点..?
  • 感谢您回复我,但实际上我的意思是不使用 css,但更新的答案与第一个答案几乎相同,因为您将相同的样式属性移交给元素。我需要做一些计算笔记只是css。但是感谢您为我尝试。
  • @Dennisrec 由于我不知道您打算进行什么计算,因此我无法将它们添加到组合中,尽管给出的答案我看不出这应该是什么问题给你
  • 好的,既然我现在已经引起了你的注意,让我为你添加一个 jfiddle 来看看。我想要的目标是当你调整一个 div 元素的大小时,例如它的宽度,当它变大时,左边的偏移量会减少,当你减小它的大小时,左边的偏移量也会减少。就像 facebook dp changer,它就像一个缩放。
  • @Dennisrec 请...从现在开始我会忙一段时间,但稍后会看看,并随时通知您
猜你喜欢
  • 2013-06-24
  • 1970-01-01
  • 2021-04-25
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
相关资源
最近更新 更多