<html>
<style>
.tops{
width:100px;
height:100px;
background:rgba(255,255,0,0.5);
position:absolute;
left:0;
top:0;
}
.container{
width:100px;
height:100px;
overflow:hidden;
position:relative;
}
</style>
<body>
<div class="container">
<div class="tops"></div>
</div>
</body>
<script>
let tops = document.getElementsByClassName('tops')[0],
center = {
x: 50,
y: 50
},
p1 = {
x: center.x,
y: 0
},
theta = 0,
r = 71,
delta = Math.PI / 180,
p2 = {},
p3 = {},
p4 = {},
p5 = {},
p6 = {},
p7 = {},
timer = setInterval(() => {
debugger
if (0 < theta && theta <= 0.25 * Math.PI) {
r = 50/Math.cos(theta);
p2 = {
x: center.x r * Math.sin(theta),
y: 0
}
p3 = {
x: center.x * 2,
y: 0
}
p4 = {
x: center.x * 2,
y: center.y * 2
}
p5 = {
x: 0,
y: center.y * 2
}
p6 = {
x: 0,
y: 0
}
p7 = p1
}
if (0.25 * Math.PI < theta && theta <= 0.75 * Math.PI) {
r = 50/Math.sin(theta);
p2 = {
x: center.x * 2,
y: center.y - r * Math.cos(theta)
}
p3 = {
x: center.x * 2,
y: center.y * 2
}
p4 = {
x: 0,
y: center.y * 2
}
p5 = {
x: 0,
y: 0
}
p6 = p1
p7 = {}
}
if (0.75 * Math.PI < theta && theta <= 1.25 * Math.PI) {
r=Math.abs(50/Math.cos(theta))
p2 = {
x: center.x r * Math.sin(theta),
y: center.y * 2
}
p3 = {
x: 0,
y: center.y * 2
}
p4 = {
x: 0,
y: 0
}
p5 = p1
p6 = {}
p7 = {}
}
if (1.25 * Math.PI < theta && theta <= 1.75 * Math.PI) {
r=Math.abs(50/Math.sin(theta))
p2 = {
x: 0,
y: center.y - r * Math.cos(theta)
}
p3 = {
x: 0,
y: 0
}
p4 = p1
p5 = {}
p6 = {}
p7 = {}
}
if (1.75 * Math.PI < theta && theta <= 2 * Math.PI) {
r=Math.abs(50/Math.cos(theta))
p2 = {
x: center.x r * Math.sin(theta),
y: 0
}
p3 = p1
p4 = {}
p5 = {}
p6 = {}
p7 = {}
}
let arrays = [p1, center, p2, p3, p4, p5, p6, p7];
for (let j = 0; j < arrays.length; j ) {
if (arrays[j].x === undefined) {
arrays.splice(j, 1);
j--
}
}
let strings = 'polygon(';
for (let j = 0; j < arrays.length; j ) {
strings = `${arrays[j].x}% ${arrays[j].y}% ,`
}
strings = (strings ')').replace(',)', ')');
tops.style.clipPath = strings
theta = 1*delta;
if (theta > 2 * Math.PI) {
clearInterval(timer)
}
console.log(strings)
}, 16.6)
</script>
</html>
clip-path赋予了前端更为强大的能力可以剪切显示元素,我们可以利用这一特性实现效果:
来源:https://www./content-4-672951.html
|