Stats实现窗帘布料鼠标悬浮摆动重力交互效果代码

代码语言:html

所属分类:动画

代码描述:Stats实现窗帘布料鼠标悬浮摆动重力交互效果代码

代码标签: Stats 窗帘 布料 鼠标 悬浮 摆动 重力 交互 代码

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

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

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

  
  
<style>
/*
global
*/
*, *::before, *::after {
    margin: 0;
    padding:  0;
    border:  0;
    box-sizing:  border-box;
}

*:focus {
    outline: none;
}

body {
    height: 100vh;
    overflow: hidden;
    background-color: rgb(35, 0, 0);
}

canvas {
    touch-action: none;
}

/*
stats
*/
#stats {
    position: absolute;
    top: 0;
    left: 0;
    opacity: 1 !important;
}

#stats #fps {
    background-color: #000 !important;
}

#stats #fps #fpsText {
    color: #eee !important;
}

#stats #fps #fpsGraph {
    background-color: #2FA1D6 !important;
}

#stats #fps #fpsGraph span {
    background-color: #303030 !important;
}

/*
dat gui
*/
div.dg {
    font-family: Helvetica, Arial, sans-serif;
    font-size: 10px;
}

.dg.main {
    margin-right: 0;
}

.dg li.folder {
    background: #000;
}

.dg .cr,
.dg .c .slider,
.dg .c input[type=text] {
    transition: background 0.33s ease;
}

.dg .cr:hover {
    background: #111;
}
</style>

  
</head>

<body translate="no">
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/Stats-16.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/dat.gui-min.js"></script>
    <script >
'use strict';

let gui = null;
let stats = null;
let statsShow = false;

let w = 0;
let h = 0;

let animationFrame = null;
let isTouchDevice = false;

const canvas = document.createElement('canvas');
const context = canvas.getContext('2d', { willReadFrequently: false, alpha: false });

let imageData = null;
let data = null;
let imageDataWidth = 0;
let imageDataBufferUint32 = null;

const center = { x: w * 0.5, y: h * 0.5 };

let borderTop = 0;
let borderBottom = 0;
let borderLeft = 0;
let borderRight = 0;

let pointerPos = { x: center.x, y: center.y };
let pointerPosFollow = { x: center.x, y: center.y };
let pointerPosFollowSpeed = 5;
let pointerDownButton = -1;
let pointerActive = false;
let pointerMoveTimeout;

const pointerMoveTimeoutTime = 2500;

//---

let clearColor32 = 0;

let colorBackgroundR = 35;
let colorBackgroundG = 0;
let colorBackgroundB = 0;

//---

const WIRE_POINT_PINNED = 1;

let wireCount = 768;
let wireJoints = 32;
let wireIterations = 8;
let wireGravity = 0.65;
let wireFriction = 0.97; // 0.938

let wirePointFollowSpeed = 32;

const wirePointMouseDistanceSensitivitySpeed = 2.5;
let wirePointMouseDistanceSensitivityMax = 512;
let wirePointMouseDistanceSensitivityMin = 256;
let wirePointMouseDistanceSensitivity = wirePointMouseDistanceSensitivityMin;

//---

let wirePointsX = null;
let wirePointsY = null;
let wirePointsOldX = null;
let wirePointsOldY = null;
let wirePointsFlag = null;
let wirePointsInitialX = null;
let wirePointsInitialY = null;

let wireJointsPointA = null;
let wireJointsPointB = null;
let wireJointsLength = null;

let wirePointStart = null;
let wirePointCount = null;
let wireJointStart = null;
let wireJointCount = null;

let wireZ = null;

let wireJointColorR = 210;
let wireJointColorG = 85;
let wireJointColorB = 0;
let wirePointColorR = 255;
let wirePointColorG = 125;
let wirePointColorB = 0;

//---

let curtainTrianglesPointA = null;
let curtainTrianglesPointB = null;
let curtainTrianglesPointC = null;

let curtainStripShade = null;

let curtainColorR = 210;
let curtainColorG = 0;
let curtainColorB = 0;

let curtainLightWavePrimaryFrequency = 0.45;
let curtainLightWavePrimaryAmplitude = 18;
let curtainLightWaveSecondaryFrequency = 1.1;
let curtainLightWaveSecondaryAmplitude = 4;

// let curtainColorCount = 0;
let curtainTrianglesPerWireStrip = 0;

//---

let lightX = 0.4;
let lightY = 0.0;
let lightZ = 1.0;

let lightAmbient = 0.35;
let lightDiffuse = 0.65;

//---

let renderDebugJoints = false;
let renderDebugPoints = false;
let renderDebugCircles = false;
let renderDebugTriangles = false;
let renderDebugDiagonalJoints = false;
let renderDebugQuads = false;

let renderShadedJoints = true;
let renderShadedTriangles = false;
let renderShadedCheckerboard = false;

//---

let introPath = [];
let introInterval = null;
let introIndex = 0;
let introPathCoordinatesCount = 512;
let introSpeedBasis = 10;
let introSpeed = introSpeedBasis;
let introEnabled = true;

//---

function init() {

  isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;

  //---

  canvas.oncontextmenu = event => {

    event.preventDefault();

  };

  if (isTouchDevice === true) {

    canvas.addEventListener('touchmove', cursorMoveHand.........完整代码请登录后点击上方下载按钮下载查看

网友评论0