wtc-math模拟橡皮筋中小球跳动带动橡皮圈变形动画效果代码

代码语言:html

所属分类:动画

代码描述:wtc-math模拟橡皮筋中小球跳动带动橡皮圈变形动画效果代码

代码标签: wtc-math 模拟 橡皮筋 小球 跳动 变形 动画

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

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

<head>
  <meta charset="UTF-8">
  


  
  
<style>
body {
  margin: 0;
  overflow: hidden;
}
canvas {
  background: #E6E6E6;
  /* image-rendering: pixelated; */
  width: 100vw;
}
</style>


  
</head>

<body translate="no">
  
  
      <script type="module">
import { Vec2 } from "https://esm.sh/wtc-math";
import { Pane } from "//repo.bfw.wiki/bfwrepo/js/tweakpane.4.0.3.js";

console.clear();


// --- SETTINGS ---
const settings = {
  numPoints: 8,
  padding: 100,
  ropeEnds: .5,
  dimensions: new Vec2(window.innerWidth, window.innerHeight),
  dpr: 2,
  ballRadius: window.innerWidth / 30,
  rafid: 0,
  lineWidth: window.innerWidth / 80,
  linePadding: 0,
  anchorPadding: 100,
  drawPoints: true,
  debug: false,
  speed: 1,
  foreground: "#EEE",
  background: "#33333A" };

// --- PANE ---
const pane = new Pane();
const f1 = pane.addFolder({
  title: "Config",
  expanded: false });

const pointSetting = f1.addBinding(settings, "numPoints", {
  step: 1,
  min: 1,
  max: 50 });

pointSetting.on('change', e => {
  const diff = e.value - points.length;
  if (diff < 0) {
    points.splice(diff, Math.abs(diff));
  } else if (diff > 0) {
    points.push(...new Array(diff).
    fill(null).
    map(
    makePoint));

  }
});
f1.addBinding(settings, "anchorPadding", {
  min: -100,
  max: 200 });

f1.addBinding(settings, "ropeEnds", {
  min: .3,
  max: .7 });

const radiusSetting = f1.addBinding(settings, "ballRadius", {
  min: 0,
  max: 100 });

const linewidthSetting = f1.addBinding(settings, "lineWidth", {
  min: 0,
  max: 30 });

const linepaddinSgetting = f1.addBinding(settings, "linePadding", {
  min: 0,
  max: 30 });

function metricChange() {
  settings.lineDistance = settings.ballRadius + settings.lineWidth / 2 + settings.linePadding;
}
radiusSetting.........完整代码请登录后点击上方下载按钮下载查看

网友评论0