gpt4 book ai didi

css - AngularJS:用ng-animate & ng-view,如何制作3D立方体旋转效果?

转载 作者:技术小花猫 更新时间:2023-10-29 10:37:28 25 4
gpt4 key购买 nike

我正在尝试使用 ng-animate 和 ng-view 制作 3D 立方体效果动画。

当我切换到另一个页面时,我想感觉自己在一个立方体上旋转。当我点击“转到第 2 页”时,实际的“第 1 页”会离开并向左旋转,而“第 2 页”会从右侧到达。

我有一些方法,但 CSS 转换真的很脏,当我切换页面时,它们没有“粘”在一起。

代码示例:http://jsfiddle.net/bnyJ6/

我试过这样的:

HTML :

<style ng-bind-html-unsafe="style"></style>

<div class="cube container">
<div ng-view ng-animate="{enter: 'animate-enter', leave: 'animate-leave'}" ></div>
</div>

<script type="text/ng-template" id="page1.html">
<div class="container " >
<div class="masthead">
<h1 class="muted">PAGE 1</h1>

<button class="btn display-button" ng-click="direction('front');go('/two')">Go Page 2</button>
</div>
</div>
</script>

<script type="text/ng-template" id="page2.html">
<div class="container " >
<div class="masthead">
<h1 class="muted">PAGE 1</h1>
<button class="btn display-button" ng-click="direction('back');go('/one')" >Go page 1</button>
</div>
</div>
</script>

Angular JS:

var app = angular.module('demo', []);

app.config(function ($routeProvider) {
$routeProvider
.when('/one', {
templateUrl:'page1.html'
})
.when('/two', {
templateUrl:'page2.html'
})
.otherwise({
redirectTo:'/one'
});
});

app.controller('MainCtrl', function($scope, $rootScope, $location) {
$scope.go = function(path) {
$location.path(path);
}
});

CSS3-脏-动画:

.animation{


-webkit-perspective:2000px;
-moz-perspective:2000px;
-o-perspective: 2000px;
perspective: 2000px;
}

.cube {

-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
position: relative;
}



.animate-enter,
.animate-leave {

-webkit-transition: 3000ms linear all;
-moz-transition: 3000ms linear all;
-ms-transition: 3000ms linear all;
-o-transition: 3000ms linear all;
transition: 3000ms linear all;
position: absolute;

}

.animate-enter {
background-color:green;
-webkit-transform: rotateY( 90deg ) translateZ(600px ) translateX(585px) ;
-moz-transform: rotateY( 90deg ) translateZ(600px ) translateX(585px);
-o-transform: rotateY( 90deg ) translateZ( 600px ) translateX(585px);
transform: rotateY( 90deg ) translateZ( 600px) translateX(585px);

opacity: 0;
}

.animate-enter.animate-enter-active{
background-color:yellow;

-webkit-transform: rotateY( 0deg ) translateX(250px) translateZ(400px );
-moz-transform: rotateY( 0deg ) translateX(250px) translateZ(400px );
-o-transform: rotateY( 0deg )translateX(250px) translateZ(401px );
transform: rotateY( 0deg ) translateX(250px) translateZ( 400px );
opacity: 1;
}

.animate-leave {
background-color:gray;
-webkit-transform: rotateY( -90deg ) translateZ( 361px );
-moz-transform: rotateY( -90deg ) translateZ( 361px );
-o-transform: rotateY( -90deg) translateZ( 361px );
transform: rotateY( -90deg) translateZ( 361px );
opacity: 0;
}

你知道如何得到这个 3D 立方体效果动画吗?

感谢您提供的各种帮助。

最佳答案

我想把它扔进戒指:

http://jsfiddle.net/bnyJ6/1/

.animation{
-webkit-perspective:2000px;
-moz-perspective:2000px;
-o-perspective: 2000px;
perspective: 2000px;
}

.cube {
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
-o-transform-style: preserve-3d;
transform-style: preserve-3d;
position: relative;
}

.animate-enter,
.animate-leave {
-webkit-transition: 3000ms linear -webkit-transform, 3000ms linear opacity, 3000ms linear background-color;
-moz-transition: 3000ms linear -moz-transform, 3000ms linear opacity, 3000ms linear background-color;
-o-transition: 3000ms linear -o-transform, 3000ms linear opacity, 3000ms linear background-color;
transition: 3000ms linear transform, 3000ms linear opacity, 3000ms linear background-color;
position: absolute;
}

.animate-enter {
background-color: green;

-webkit-transform-origin: 0% 50%;
-moz-transform-origin: 0% 50%;
-o-transform-origin: 0% 50%;
transform-origin: 0% 50%;

-webkit-transform: translateX(100%) rotateY(90deg);
-moz-transform: translateX(100%) rotateY(90deg);
-o-transform: translateX(100%) rotateY(90deg);
transform: translateX(100%) rotateY(90deg);

opacity: 0;
}
.animate-enter.animate-enter-active {
background-color: yellow;

-webkit-transform: translateX(0%) rotateY(0deg);
-moz-transform: translateX(0%) rotateY(0deg);
-o-transform: translateX(0%) rotateY(0deg);
transform: translateX(0%) rotateY(0deg);

opacity: 1;
}

.animate-leave {
-webkit-transform-origin: 100% 50%;
-moz-transform-origin: 100% 50%;
-o-transform-origin: 100% 50%;
transform-origin: 100% 50%;
}
.animate-leave.animate-leave-active {
background-color: gray;

-webkit-transform: translateX(-100%) rotateY(-90deg);
-moz-transform: translateX(-100%) rotateY(-90deg);
-o-transform: translateX(-100%) rotateY(-90deg);
transform: translateX(-100%) rotateY(-90deg);

opacity: 0;
}

诀窍是将第一个元素的 transform-origin 向右移动,第二个元素向左移动,这样两个元素都围绕同一点进行转换,使其看起来就好像它们是相连的。

为了让它最终工作,需要单独定位过渡属性,否则它也会为 transform-origin 属性设置动画,这看起来很时髦。人们会认为为 NgAnimate 正确使用 setupactive 类会阻止这种行为,但不幸的是它不会。我猜 Angular 在添加 active 类之前使用的延迟(目前为 1 毫秒)太短了。

附言。我想您已经知道了,但这与 IE 不兼容。

关于css - AngularJS:用ng-animate & ng-view,如何制作3D立方体旋转效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17614339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com