【问题标题】:How to zoom out a div using animations?如何使用动画缩小 div?
【发布时间】:2018-09-06 02:51:45
【问题描述】:

我有一个覆盖整个页面的 DIV(高度和宽度为 100%)。我正在尝试使用 CSS(可能还有 JavaScript)来创建缩小动画效果,因此 DIV 更小(使 div 内的所有内容 - 它的子级 - 也更小)到页面上的特定点(页面中间)以及特定的 widthheight(例如 100 * 100px)。

我从以下代码开始:

<div id="toBeZoomedOut">
  <div>something</div>
  <div><img src="background.jpg"></div>
</div>

#toBeZoomedOut {
   background-color: black;
   border: 1px solid #AAAAAA;
   color: white;
   width: 300px;
   height: 300px;
   margin-left: auto;
   margin-right: auto;
   -webkit-transition: 1s ease-in-out;
   -moz-transition: 1s ease-in-out;
   transition: 1s ease-in-out;
}

#toBeZoomedOut img {
   height: 250px;
   width: 250px;
}

#toBeZoomedOut:hover {
   zoom: 0.5;
}

此代码的问题在于它缩小了组件(父 div)并立即缩小了其中的内容,然后返回放大组件。

基本上它有点小车。有什么有用的修复程序可以将所有内容一起缩小吗?如果我可以将所有内容一起缩小到页面上的特定位置和特定的宽度/高度(例如,将所有内容缩小到左侧:100px,顶部:100px 并且父 div 应该是:100px * 100px其他一切都是相对的)。

我知道使用 JavaScript 可能会更容易?有什么帮助吗?

最后一点,如果您注意到动画并没有真正反映缩放动画。虽然这将是一个额外的好处,但实际的缩放动画会很棒。

JSFiddle 链接使其更容易:http://jsfiddle.net/HU46s/

【问题讨论】:

  • 你要不要this
  • 感谢您的回复,但不是真的。我想要做的是当我有一个 div 时(即使它有 10 个不同的子级,在那个 div 内有不同的大小和位置),我试图缩小父级 div,缩小里面相对于现在的新没有首先放大 div 的大小。你有一个div,它的背景在悬停时放大,在你离开悬停时缩小,这与我的问题不同。不过,我非常感谢您提供帮助,谢谢:)
  • 哦,你需要他们相对 :) 好的好的,谢谢你的澄清..

标签: javascript jquery html css


【解决方案1】:

我正在使用通用选择器来定位父容器内的所有内容,以便对其应用 css 转换。

接下来我将内部内容的宽度更改为%,以便于缩放。

这是css:

#toBeZoomedOut * {
   -webkit-transition: all 1s ease;
   -moz-transition: 1s ease;
   transition: 1s ease;
}

最后,提琴:Demo

【讨论】:

  • 感谢您的回答!还有几个问题(在上面的问题中提出): 1. 我们能否让最终结果具有特定的宽度和高度而不是缩放:0.5? 2.我们能否让最终的结果(最终缩小的框)在特定位置(平滑地缩小到页面中的特定位置,例如顶部:100px,左侧:100px)?再次感谢您的回答:)
  • 太棒了,我还更新了它以确保它缩小到页面上的特定位置。这很酷,我会接受这个作为答案。谢谢! :)
  • 没问题的朋友,祝你设计好运!
  • 不推荐使用缩放,因为它不适用于大多数浏览器:developer.mozilla.org/en-US/docs/Web/CSS/zoom "Non-standard 此功能是非标准的,不在标准轨道上。请勿在生产中使用它面向 Web 的网站:它不会适用于所有用户。实现之间也可能存在很大的不兼容性,并且将来行为可能会发生变化。”
【解决方案2】:

要使所有图像和 div 背景同时缩放,您必须为#zoomer-inside 元素使用百分比大小并设置特定的字体大小...

但是不流畅,如果你想要更流畅的效果,我建议你使用jQuery结合一些animation()方法或插件。

小提琴: http://jsfiddle.net/HU46s/1/

代码:

#toBeZoomedOut {
   background-color: black;
   border: 1px solid #AAAAAA;
   color: white;
   width: 300px;
   height: 300px;
   margin-left: auto;
   margin-right: auto;
   -webkit-transition: all 1s ease-in-out;
   -moz-transition: all 1s ease-in-out;
   transition: all 1s ease-in-out;
}
#toBeZoomedOut div, #toBeZoomedOut img {
   width: 90%;
   font-size: 20px;
}
#toBeZoomedOut img {
   height: 90%;
   width: 90%;
}

#toBeZoomedOut:hover {
   zoom: 0.5;
}

jQuery 更流畅:

小提琴: http://jsfiddle.net/HU46s/5/

代码: jQuery - 更流畅的解决方案(甚至更少的 CSS):

 $('#toBeZoomedOut').hover( /* change the animation speed as you want :) */
     function(){
        $(this).animate({ 'zoom': 0.5}, 400); //animation speed 400=0.4s !
     },
     function(){
        $(this).animate({ 'zoom': 1}, 400); //animation speed 400=0.4s !
     }
 );

...你需要的唯一 CSS 是:

#toBeZoomedOut {
   background-color: black;
   border: 1px solid #AAAAAA;
   color: white;
   width: 300px;
   height: 300px;
   margin-left: auto;
   margin-right: auto;
}

#toBeZoomedOut img {
   width: 250px;
}

【讨论】:

  • 感谢您的回答!尽管这解决了部分问题(相对缩放所有内容)这很好,但它仍然不平滑(正如您所提到的)以及它看起来不像缩放效果的事实。您认为您可以为 jQuery 实现提供任何帮助吗?再次感谢您的回答:)
猜你喜欢
  • 2015-03-11
  • 2023-03-09
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2015-04-20
相关资源
最近更新 更多