js+svg实现可配置修改参数的麻绳打结动画效果代码

代码语言:html

所属分类:动画

代码描述:js+svg实现可配置修改参数的麻绳打结动画效果代码

代码标签: js svg 配置 修改 参数 麻绳 打结 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开


<!DOCTYPE html>
<html lang="en" >

<head>

 
<meta charset="UTF-8">
 

 
 
 
<style>
* {
 
margin: 0;
 
padding: 0;
}

body
{
 
padding: 50px 20px;
 
font-family: Helvetica, Arial, sans-serif;
 
font-size: 16px;
}

input
{
 
accent-color: #4394e5;
}

a
,
a:visited {
 
display: inline-block;
 
font-size: 20px;
 
line-height: 1;
 
margin: 20px 0;
 
color: black;
 
border-bottom: 1px solid #ccc;
 
outline-offset: 5px;
 
transition: all 250ms;
 
text-decoration: none;
}
a:hover,
a:visited:hover {
 
border-bottom-color: #4394e5;
}
a:active,
a:visited:active {
 
transform: translateY(1px);
}

.demo {
 
max-width: 1000px;
 
margin: 0 auto;
 
padding: 40px 20px;
}

.demo-svg {
 
overflow: visible;
}

path
{
 
stroke-width: 1.5;
}

.path {
 
stroke: #4394e5;
}

.normals path {
 
stroke: #4394e5;
}

.points {
 
stroke: none;
 
fill: #4394e5;
}

.segment path,
.polygons-rounded path,
.polygons path {
 
stroke: #4394e5;
}

.demo-controls {
 
display: flex;
 
flex-wrap: wrap;
 
max-width: 750px;
}

.demo-controls-column {
 
flex: auto 0 0;
 
margin-right: 40px;
}

.demo-title {
 
font-weight: bold;
 
color: #4394e5;
 
margin: 20px 0;
 
font-size: 20px;
}

.demo-control {
 
display: flex;
 
margin-bottom: 10px;
 
max-width: 200px;
 
flex-wrap: wrap;
}
.demo-control input {
 
display: block;
 
flex: 100%;
}

.demo-label {
 
display: flex;
 
margin-bottom: 10px;
}
.demo-label input {
 
margin-right: 10px;
}

.demo-control label,
.demo-label {
 
font-weight: bold;
}

.demo-value {
 
margin-left: 6px;
}
</style>


</head>

<body >
 
<div class="demo">
 
<svg class="demo-svg" viewBox="-40 -30 580 230"></svg>

 
<a target="_blank" href="https://muffinman.io/blog/draw-svg-rope-using-javascript/">Read the blog post &raquo;</a>
 
 
<div class="demo-controls">
   
<div class="demo-controls-column">
     
<div class="demo-title">Options</div>
     
<label class="demo-label">
       
<input class="demo-checkbox-animate" type="checkbox" checked />
        Animate
     
</label>
     
<div class="demo-control">
       
<label for="demo-step">Segment width</label>
       
<span class="demo-value"></span>
       
<input data-key="step" type="range" min="3" max="50" step="1" value="20" id="demo-step" />
     
</div>
     
<div class="demo-control">
       
<label for="demo-thickness">Rope thickness</label>
       
<span class="demo-value"></span>
       
<input data-key="thickness" type="range" min="3" max="50" step="1" value="40" id="demo-thickness" />
     
</div>
     
<div class="demo-control">
       
<label for="demo-angle">Skew angle</label>
       
<span class="demo-value"></span>
       
<input data-key="angle" type="range" min="0" max="90" step="1" value="45" id="demo-angle" />
     
</div>
   
</div>
   
<div class="demo-controls-column">
     
<div class="demo-title">Render</div>
     
<label class="demo-label">
       
<input data-key="path" class="demo-checkbox" type="checkbox" />
        Path
     
</label>
     
<label class="demo-label">
       
<input data-key="points" class="demo-checkbox" type="checkbox" />
        Points
     
</label>
     
<label class="demo-label">
       
<input data-key="normals" class="demo-checkbox" type="checkbox" />
        Normals
     
</label>
     
<label class="demo-label">
       
<input data-key="polygons" class="demo-checkbox" type="checkbox" />
        Square-ish segments
     
</label>
     
<label class="demo-label">
       
<input data-key="polygonsRounded" class="demo-checkbox" type="checkbox" />
        Rounded square-ish segments
     
</label>
     
<label class="demo-label">
       
<input data-key="segments" class="demo-checkbox" type="checkbox" />
        Segments
     
</label>
     
<label class="demo-label">
       
<input data-key="rope" class="demo-checkbox" type="checkbox" checked />Rounded segments (finished rope)
     
</label>
   
</div>
   
<div class="demo-controls-column">
     
<div class="demo-title">Colors</div>
     
<label class="demo-label">
       
<input class="demo-radio" type="radio" name="demo-colors" value="transparent" />
        Transparent
     
</label>
     
<label class="demo-label">
       
<input class="demo-radio" type="radio" name="demo-colors" value="white" />
        White
     
</label>
     
<label class="demo-label">
       
<input class="demo-radio" type="radio" checked name="demo-colors" value="natural" />
        Natural
     
</label>
     
<label class="demo-label">
       
<input class="demo-radio" type="radio" name="demo-colors" value="rainbow" />
        Rainbow
     
</label>
   
</div>
 
</div>
</div>
 
 
     
<script>
// ----- VECTORS ----- //.........完整代码请登录后点击上方下载按钮下载查看

网友评论0