react实现科幻电影中门上锁动画效果代码
代码语言:html
所属分类:动画
代码描述:react实现科幻电影中门上锁动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
body {
background-color:#111;
overflow: hidden;
text-align:center;
}
body,
html {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
svg{
width:100%;
height:100%;
}
#app{
width:100%;
height:100%;
}
#hitRing{
cursor:pointer;
-webkit-tap-highlight-color:transparent;
}
.disabled{
pointer-events:none;
}
.enabled{
pointer-events:auto;
}
</style>
</head>
<body >
<div id="app"></div>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/react.production.16.13.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/react-dom.production.16.13.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/TweenMax.min.js"></script>
<script >
function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}class DoorUI extends React.Component {
constructor(props) {
super(props);_defineProperty(this, "componentDidUpdate",
e => {
var tl = new TimelineMax({ onComplete: this.setBtnEnabled, onCompleteParams: [true] }).timeScale(1.8);
tl.staggerTo('.radialGroup g', 1, {
fill: this.state.open ? '#41E969' : '#F70048' },
0.2).
to('.bar', 0.4, {
strokeWidth: this.state.open ? 0 : 4,
transformOrigin: '50% 50%',
stroke: this.state.open ? '#41E969' : '#F70048',
ease: Sine.easeOut },
0).
to('.ring', 0.4, {
stroke: this.state.open ? '#41E969' : '#F70048' },
0).
staggerTo('.radialGroup g', 0.3, {
cycle: {
alpha: [0] },
repeat: 1,
ease: Sine.easeOut,
yoyoEase: Sine.easeOut },
0.1, 0).
staggerTo('.radialGroup g path', 0.3, {
cycle: {
scale: [0.95] },
repeat: 1,
svgOrigin: '400 300',
ease: Sine.easeIn,
yoyoEase: Sine.easeOut //Elastic.easeOut.config(0.5,0.75)
}, 0.0163, 0.1).
to('.radialGroup', 1, {
svgOrigin: '400 300',
ease: Elastic.easeOut.config(0.5, 0.75),
rotation: '+=36' },
0).
to('.icon', 1, {
svgOrigin: '400 300',
transformOrigin: '50% 50%',
ease: Sine.easeOut,
//ease:Elastic.easeOut.config(0.5,0.75),
rotation: this.state.open ? '+=0' : '-=180' },
0.1).
to('.icon', 0.4, {
scale: 0.9,
svgOrigin: '400 300',
transformOrigin: '50% 50%',
ease: Sine.easeOut,
yoyoEase: Elastic.easeOut.config(0.5, 0.75),
repeat: 1 },
0);
});_defineProperty(this, "setBtnEnabled",
e => {
this.refs.hitBtn.setAttribute("class", !e ? 'disabled' : 'enabled');
});_defineProperty(this, "toggle",
e => {
this.setBtnEnabled(false);
this.setState({ open: !this.state.open });
});this.state = { open: true };this.tl = new TimelineMax({});}onLoaded() {}componentDidMount() {this.onLoaded();}
render() {
return (
React.createElement("svg", { viewBox: "200 150 400 300", preserveAspectRatio: "xMidYMid meet" },
React.createElement("title", null, "uiDoorLock"),
React.createElement("defs", null,
React.createElement("circle", {
id: "ring",
cx: "400",
cy: "300",
r: "23",
strokeMiterlimit: "10",
strokeWidth: "4" }),
React.createElement("circle", {
id: "hitRing",
cx: "400",
cy: "300",
r: "100",
strokeMiterlimit: "10",
strokeWidth: "4" }),
React.createElement("clipPath", { id: "ringMask" },
React.createElement("use", { xlinkHref: "#ring", fill: "red" }))),
React.createElement("g", { className: "radialGroup" },
React.createElement("g", { opacity: "0.6", fill: "#47ac51" },
React.createElement("path", { d: "M405.89,246.78l-1.14,7.2a1,1,0,0,1-1.06.84,45.61,45.61,0,0,0-21.17,3.34,1,1,0,0,1-1.27-.47l-3.32-6.5a1,1,0,0,1,.5-1.38A54.84,54.84,0,0,1,405,245.62,1,1,0,0,1,405.89,246.78Z" }),
React.createElement("path", { d: "M376.79,260a1,1,0,0,1-.38,1.3,45.81.........完整代码请登录后点击上方下载按钮下载查看
网友评论0