html and css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Playmorph</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.4/TweenMax.min.js"></script>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-image: url(active-adult-asian-1033374.jpg);
background-size:cover;
overflow: hidden;
}
.play-button {
width: 152px;
height: 152px;
position: relative;
cursor: pointer;
}
.play-backdrop {
width: 100%;
height: 100%;
position: fixed;
left: 0;
top: 0;
background-image: url(beautiful-girl-model-157131.jpg);
opacity: 0;
background-size: cover;
visibility: hidden;
}
.play-close {
width: 30px;
height: 30px;
position: absolute;
right: 0;
bottom: calc(100% + 15px);
border: none;
outline: none;
background: deepskyblue;
opacity: 0;
cursor: pointer;
}
.play-close::before,
.play-close::after {
content: "";
display: block;
width: 100%;
height: 1px;
position: absolute;
top: 50%;
left: 0;
transform: rotate(45deg);
background-color: white;
border-radius: 50px;
}
.play-close::after {
transform: rotate(-45deg);
color:black;
}
.play-circles {
display: block;
width: 100%;
height: 100%;
}
.play-perspective {
width: 600px;
height: 400px;
position: absolute;
left: -230px;
top: -125px;
}
.play-triangle {
width: 600px;
height: 400px;
background-color:deepskyblue;
cursor: pointer;
}
</style>
</head>
<body>
<div class="play-backdrop"></div>
<div class="play-button">
<svg class="play-circles" viewBox="0 0 152 152">
<circle class="play-circle-01" fill="none" stroke="#fff" stroke-width="3" stroke-dasharray="343" cx="76" cy="76" r="72.7"/>
<circle class="play-circle-02" fill="none" stroke="#fff" stroke-width="3" stroke-dasharray="309" cx="76" cy="76" r="65.5"/>
</svg>
<div class="play-perspective">
<button class="play-close"></button>
<div class="play-triangle">
<div class="play-video">
<iframe width="600" height="415" src="https://www.youtube.com/embed/9w2JLO7A-Os" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</div>
</div>
</div>
</div>
<script>
TweenMax.set(".play-circle-01", {
rotation: 90,
transformOrigin: "center"
})
TweenMax.set(".play-circle-02", {
rotation: -90,
transformOrigin: "center"
})
TweenMax.set(".play-perspective", {
xPercent: 6.5,
scale: .175,
transformOrigin: "center",
perspective: 1
})
TweenMax.set(".play-video", {
visibility: "hidden",
opacity: 0,
})
TweenMax.set(".play-triangle", {
transformOrigin: "left center",
transformStyle: "preserve-3d",
rotationY: 10,
scaleX: 2
})
const rotateTL = new TimelineMax({ paused: true })
.to(".play-circle-01", .7, {
opacity: .1,
rotation: '+=360',
strokeDasharray: 456,
ease: Power1.easeInOut
}, 0)
.to(".play-circle-02", .7, {
opacity: .1,
rotation: '-=360',
strokeDasharray: 411,
ease: Power1.easeInOut
}, 0)
const openTL = new TimelineMax({ paused: true })
.to(".play-backdrop", 1, {
opacity: .95,
visibility: "visible",
ease: Power2.easeInOut
}, 0)
.to(".play-close", 1, {
opacity: 1,
ease: Power2.easeInOut
}, 0)
.to(".play-perspective", 1, {
xPercent: 0,
scale: 1,
ease: Power2.easeInOut
}, 0)
.to(".play-triangle", 1, {
scaleX: 1,
ease: ExpoScaleEase.config(2, 1, Power2.easeInOut)
}, 0)
.to(".play-triangle", 1, {
rotationY: 0,
ease: ExpoScaleEase.config(10, .01, Power2.easeInOut)
}, 0)
.to(".play-video", 1, {
visibility: "visible",
opacity: 1
}, .5)
const button = document.querySelector(".play-button")
const backdrop = document.querySelector(".play-backdrop")
const close = document.querySelector(".play-close")
button.addEventListener("mouseover", () => rotateTL.play())
button.addEventListener("mouseleave", () => rotateTL.reverse())
button.addEventListener("click", () => openTL.play())
backdrop.addEventListener("click", () => openTL.reverse())
close.addEventListener("click", e => {
e.stopPropagation()
openTL.reverse()
})
</script>
</body>
</html>
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Playmorph</title>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.4/TweenMax.min.js"></script>
- <style>
- body {
- display: flex;
- justify-content: center;
- align-items: center;
- height: 100vh;
- margin: 0;
- background-image: url(active-adult-asian-1033374.jpg);
- background-size:cover;
- overflow: hidden;
- }
- .play-button {
- width: 152px;
- height: 152px;
- position: relative;
- cursor: pointer;
- }
- .play-backdrop {
- width: 100%;
- height: 100%;
- position: fixed;
- left: 0;
- top: 0;
- background-image: url(beautiful-girl-model-157131.jpg);
- opacity: 0;
- background-size: cover;
- visibility: hidden;
- }
- .play-close {
- width: 30px;
- height: 30px;
- position: absolute;
- right: 0;
- bottom: calc(100% + 15px);
- border: none;
- outline: none;
- background: deepskyblue;
- opacity: 0;
- cursor: pointer;
- }
- .play-close::before,
- .play-close::after {
- content: "";
- display: block;
- width: 100%;
- height: 1px;
- position: absolute;
- top: 50%;
- left: 0;
- transform: rotate(45deg);
- background-color: white;
- border-radius: 50px;
-
- }
- .play-close::after {
- transform: rotate(-45deg);
- color:black;
- }
- .play-circles {
- display: block;
- width: 100%;
- height: 100%;
- }
- .play-perspective {
- width: 600px;
- height: 400px;
- position: absolute;
- left: -230px;
- top: -125px;
- }
- .play-triangle {
- width: 600px;
- height: 400px;
- background-color:deepskyblue;
- cursor: pointer;
- }
-
- </style>
- </head>
- <body>
- <div class="play-backdrop"></div>
- <div class="play-button">
- <svg class="play-circles" viewBox="0 0 152 152">
- <circle class="play-circle-01" fill="none" stroke="#fff" stroke-width="3" stroke-dasharray="343" cx="76" cy="76" r="72.7"/>
- <circle class="play-circle-02" fill="none" stroke="#fff" stroke-width="3" stroke-dasharray="309" cx="76" cy="76" r="65.5"/>
- </svg>
- <div class="play-perspective">
- <button class="play-close"></button>
- <div class="play-triangle">
- <div class="play-video">
- <iframe width="600" height="415" src="https://www.youtube.com/embed/9w2JLO7A-Os" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
- </div>
- </div>
- </div>
- </div>
- <script>
- TweenMax.set(".play-circle-01", {
- rotation: 90,
- transformOrigin: "center"
- })
- TweenMax.set(".play-circle-02", {
- rotation: -90,
- transformOrigin: "center"
- })
- TweenMax.set(".play-perspective", {
- xPercent: 6.5,
- scale: .175,
- transformOrigin: "center",
- perspective: 1
- })
- TweenMax.set(".play-video", {
- visibility: "hidden",
- opacity: 0,
- })
- TweenMax.set(".play-triangle", {
- transformOrigin: "left center",
- transformStyle: "preserve-3d",
- rotationY: 10,
- scaleX: 2
- })
- const rotateTL = new TimelineMax({ paused: true })
- .to(".play-circle-01", .7, {
- opacity: .1,
- rotation: '+=360',
- strokeDasharray: 456,
- ease: Power1.easeInOut
- }, 0)
- .to(".play-circle-02", .7, {
- opacity: .1,
- rotation: '-=360',
- strokeDasharray: 411,
- ease: Power1.easeInOut
- }, 0)
- const openTL = new TimelineMax({ paused: true })
- .to(".play-backdrop", 1, {
- opacity: .95,
- visibility: "visible",
- ease: Power2.easeInOut
- }, 0)
- .to(".play-close", 1, {
- opacity: 1,
- ease: Power2.easeInOut
- }, 0)
- .to(".play-perspective", 1, {
- xPercent: 0,
- scale: 1,
- ease: Power2.easeInOut
- }, 0)
- .to(".play-triangle", 1, {
- scaleX: 1,
- ease: ExpoScaleEase.config(2, 1, Power2.easeInOut)
- }, 0)
- .to(".play-triangle", 1, {
- rotationY: 0,
- ease: ExpoScaleEase.config(10, .01, Power2.easeInOut)
- }, 0)
- .to(".play-video", 1, {
- visibility: "visible",
- opacity: 1
- }, .5)
- const button = document.querySelector(".play-button")
- const backdrop = document.querySelector(".play-backdrop")
- const close = document.querySelector(".play-close")
- button.addEventListener("mouseover", () => rotateTL.play())
- button.addEventListener("mouseleave", () => rotateTL.reverse())
- button.addEventListener("click", () => openTL.play())
- backdrop.addEventListener("click", () => openTL.reverse())
- close.addEventListener("click", e => {
- e.stopPropagation()
- openTL.reverse()
- })
-
-
-
- </script>
- </body>
- </html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Playmorph</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.20.4/TweenMax.min.js"></script>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
background-image: url(active-adult-asian-1033374.jpg);
background-size:cover;
overflow: hidden;
}
.play-button {
width: 152px;
height: 152px;
position: relative;
cursor: pointer;
}
.play-backdrop {
width: 100%;
height: 100%;
position: fixed;
left: 0;
top: 0;
background-image: url(beautiful-girl-model-157131.jpg);
opacity: 0;
background-size: cover;
visibility: hidden;
}
.play-close {
width: 30px;
height: 30px;
position: absolute;
right: 0;
bottom: calc(100% + 15px);
border: none;
outline: none;
background: deepskyblue;
opacity: 0;
cursor: pointer;
}
.play-close::before,
.play-close::after {
content: "";
display: block;
width: 100%;
height: 1px;
position: absolute;
top: 50%;
left: 0;
transform: rotate(45deg);
background-color: white;
border-radius: 50px;
}
.play-close::after {
transform: rotate(-45deg);
color:black;
}
.play-circles {
display: block;
width: 100%;
height: 100%;
}
.play-perspective {
width: 600px;
height: 400px;
position: absolute;
left: -230px;
top: -125px;
}
.play-triangle {
width: 600px;
height: 400px;
background-color:deepskyblue;
cursor: pointer;
}
</style>
</head>
<body>
<div class="play-backdrop"></div>
<div class="play-button">
<svg class="play-circles" viewBox="0 0 152 152">
<circle class="play-circle-01" fill="none" stroke="#fff" stroke-width="3" stroke-dasharray="343" cx="76" cy="76" r="72.7"/>
<circle class="play-circle-02" fill="none" stroke="#fff" stroke-width="3" stroke-dasharray="309" cx="76" cy="76" r="65.5"/>
</svg>
<div class="play-perspective">
<button class="play-close"></button>
<div class="play-triangle">
<div class="play-video">
<iframe width="600" height="415" src="https://www.youtube.com/embed/9w2JLO7A-Os" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
</div>
</div>
</div>
</div>
<script>
TweenMax.set(".play-circle-01", {
rotation: 90,
transformOrigin: "center"
})
TweenMax.set(".play-circle-02", {
rotation: -90,
transformOrigin: "center"
})
TweenMax.set(".play-perspective", {
xPercent: 6.5,
scale: .175,
transformOrigin: "center",
perspective: 1
})
TweenMax.set(".play-video", {
visibility: "hidden",
opacity: 0,
})
TweenMax.set(".play-triangle", {
transformOrigin: "left center",
transformStyle: "preserve-3d",
rotationY: 10,
scaleX: 2
})
const rotateTL = new TimelineMax({ paused: true })
.to(".play-circle-01", .7, {
opacity: .1,
rotation: '+=360',
strokeDasharray: 456,
ease: Power1.easeInOut
}, 0)
.to(".play-circle-02", .7, {
opacity: .1,
rotation: '-=360',
strokeDasharray: 411,
ease: Power1.easeInOut
}, 0)
const openTL = new TimelineMax({ paused: true })
.to(".play-backdrop", 1, {
opacity: .95,
visibility: "visible",
ease: Power2.easeInOut
}, 0)
.to(".play-close", 1, {
opacity: 1,
ease: Power2.easeInOut
}, 0)
.to(".play-perspective", 1, {
xPercent: 0,
scale: 1,
ease: Power2.easeInOut
}, 0)
.to(".play-triangle", 1, {
scaleX: 1,
ease: ExpoScaleEase.config(2, 1, Power2.easeInOut)
}, 0)
.to(".play-triangle", 1, {
rotationY: 0,
ease: ExpoScaleEase.config(10, .01, Power2.easeInOut)
}, 0)
.to(".play-video", 1, {
visibility: "visible",
opacity: 1
}, .5)
const button = document.querySelector(".play-button")
const backdrop = document.querySelector(".play-backdrop")
const close = document.querySelector(".play-close")
button.addEventListener("mouseover", () => rotateTL.play())
button.addEventListener("mouseleave", () => rotateTL.reverse())
button.addEventListener("click", () => openTL.play())
backdrop.addEventListener("click", () => openTL.reverse())
close.addEventListener("click", e => {
e.stopPropagation()
openTL.reverse()
})
</script>
</body>
</html>
在线演示
让链接同时具备两种打开方式
公众号回复:gcode 获取解压密码
2,508 人查阅