CSS过渡动画不适用于减小图像的大小

Posted

技术标签:

【中文标题】CSS过渡动画不适用于减小图像的大小【英文标题】:css transition animation doesn't work for decreasing size of image 【发布时间】:2017-06-06 19:46:49 【问题描述】:

增加图像大小的 CSS 过渡效果,但不适用于减小图像大小。有人知道怎么解决吗?

var app = angular.module('myApp', ['ngAnimate']);
app.controller('myController', function($scope)
	$scope.myImgClass = 'start-class';
);
app.animation('.fadeOut', function()
	return 
		enter: function(element, parentElement, afterElement, doneCallback),
		leave: function(element, doneCallback),
		move: function(element, parentElement, afterElement, doneCallback),
		addClass: function(element, className, done)
			jQuery(element).animate( opacity: 0 , 3000);
		,
		removeClass: function(element, className, done)
			jQuery(element).animate( opacity: 1 , 3000);
		
	;
);
.shrink-add, .shrink-remove
  -webkit-transition:all ease 2.5s;
  -moz-transition:all ease 2.5s;
  -o-transition:all ease 2.5s;
  transition:all ease 2.5s;

.shrink,
.shrink-add.shrink-add-active
  height: 100px;


.start-class,
.shrink-remove.shrink-remove-active
  height: 400px;
<!doctype html>
<html ng-app="myApp">
<head>
  <title>AngularJS $animate Service</title>
  <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
  <link rel="stylesheet" href="/css/animate.css">
</head>
<body>
  <div ng-controller="myController">
  <h3>Image Animation</h3>
  <input type="button" ng-click="myImgClass='shrink'" value="Small"/>
  <input type="button" ng-click="myImgClass=''" value="Big"/>
  <hr>
  <img ng-class="myImgClass" src="http://vriz.net/vriz/nma/ch25/static/images/arch.jpg"/>
  </div>
  <script src="http://code.angularjs.org/1.2.9/angular.min.js"></script>
  <script src="http://code.angularjs.org/1.2.9/angular-animate.min.js"></script>
</body>
</html>

【问题讨论】:

您的代码似乎无法正常工作,但基于此,我最好的预感是您应该尝试将过渡添加到实际图像,而不是添加到图像上的类触发按钮点击。 【参考方案1】:

您的代码不起作用,而且您的代码示例是 CSS 和 HTML 令人困惑。

但我要回答,因为据我了解,这似乎是人们对悬停所犯的最基本错误之一 :) @DawnPatrol 在他的评论中指出了这一点!

当您要应用过渡时,该过渡属于元素,因此它是决定如何执行实际过渡的元素的行为。因此,它应该应用于任何特定状态的元素 no!

方法错误:

<div class="box"></div>


.box
  width: 100px;
  height: 100px;
  background: red;

.box:hover
  transform: scale(2);
  -webkit-transition: all 0.3s; 
  -moz-transition: all 0.3s; 
  -ms-transition: all 0.3s; 
  -o-transition: all 0.3s ; 
  transition: all 0.3s;

这里的过渡适用于悬停状态,因此在鼠标悬停在 div 上之前,过渡将按预期进行,但一旦离开,它将无法工作并变得生涩。当您将转换代码应用于“活动”、“禁用”等其他类时,也会发生同样的情况

演示:https://jsfiddle.net/a6a9d0e6/

正确方法:

<div class="box"></div>


.box
  width: 100px;
  height: 100px;
  background: red;
  -webkit-transition: all 0.3s; 
  -moz-transition: all 0.3s; 
  -ms-transition: all 0.3s; 
  -o-transition: all 0.3s ; 
  transition: all 0.3s;

.box:hover
  transform: scale(2);

无论添加什么类以及元素处于什么状态,此处悬停都会按预期工作,因为转换不是特定于特定状态或类的。

演示:https://jsfiddle.net/a6a9d0e6/1/

【讨论】:

您是否回答过考虑 AngularJS 动画服务?

以上是关于CSS过渡动画不适用于减小图像的大小的主要内容,如果未能解决你的问题,请参考以下文章

css 过渡动画不适用于 svg 路径的“d”属性更改

在子元素中添加/删除类时的 CSS3 过渡动画

CSS变化过渡与动画

自定义 UIViewController 过渡动画适用于演示,但不适用于解雇

CSS 过渡不适用于 ng-class

CSS 过渡不适用于 chrome 45 中的 scale(0) + 硬件加速?