canvas图片生成各种拼图裁切分解代码
代码语言:html
所属分类:其他
代码描述:canvas图片生成各种拼图裁切分解代码
代码标签: canvas 图片 生成 各种 拼图 裁切 分解 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<style>
body {
font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif;
background-color: #fff;
margin: 0;
padding: 0;
border-width: 0;
cursor: pointer;
}
#menu {
position: relative;
list-style-type: none;
padding-left: 5px;
z-index: 1000;
/* 1 */
display: inline-block;
text-align: center;
}
#menu li {
margin: 2px;
padding: 4px 10px;
border-radius: 5px;
background-color: #ffff80;
}
#menu li:hover {
background-color: #ffDD60;
}
#forPuzzle {
position: absolute;
width: 95vw;
height: 95vh;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #ffffdd;
overflow: hidden;
}
.polypiece {
display: block;
overflow: hidden;
position: absolute;
}
.moving {
transition-property: top, left;
transition-duration: 1s;
transition-timing-function: linear;
}
.gameCanvas {
display: none;
overflow: hidden;
position: absolute;
}
</style>
</head>
<body translate="no">
<div id=forPuzzle></div>
<ul id="menu">
<li>☰</li>
<li>Reset</li>
<li>load image</li>
<li>shape: <select id="shape">
<option value="1" selected>classic</option>
<option value="2">triangle</option>
<option value="3">round</option>
<option value="4">straight</option>
</select></li>
<li>12 pieces</li>
<li>25 pieces</li>
<li>50 pieces</li>
<li>100 pieces</li>
<li>200 pieces</li>
</ul>
<script >
"use strict";
let puzzle, autoStart;
const mhypot = Math.hypot,
mrandom = Math.random,
mmax = Math.max,
mmin = Math.min,
mround = Math.round,
mfloor = Math.floor,
msqrt = Math.sqrt,
mabs = Math.abs;
//-----------------------------------------------------------------------------
function isMiniature() {
return location.pathname.includes('/fullcpgrid/');
}
//-----------------------------------------------------------------------------
function alea(min, max) {
// random number [min..max[ . If no max is provided, [0..min[
if (typeof max == 'undefined') return min * mrandom();
return min + (max - min) * mrandom();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function intAlea(min, max) {
// random integer number [min..max[ . If no max is provided, [0..min[
if (typeof max == 'undefined') {
max = min;min = 0;
}
return mfloor(min + (max - min) * mrandom());
} // intAlea
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function arrayShuffle(array) {
/* randomly changes the order of items in an array
only the order is modified, not the elements
*/
let k1, temp;
for (let k = array.length - 1; k >= 1; --k) {
k1 = intAlea(0, k + 1);
temp = array[k];
array[k] = array[k1];
array[k1] = temp;
} // for k
return array;
} // arrayShuffle
//-----------------------------------------------------------------------------
// Point - - - - - - - - - - - - - - - - - - - -
class Point {
constructor(x, y) {
this.x = Number(x);
this.y = Number(y);
} // constructor
copy() {
return new Point(this.x, this.y);
}
distance(otherPoint) {
return mhypot(this.x - otherPoint.x, this.y - otherPoint.y);
}}
// class Point
// Segment - - - - - - - - - - - - - - - - - - - -
// those segments are oriented
class Segment {
constructor(p1, p2) {
this.p1 = new Point(p1.x, p1.y);
this.p2 = new Point(p2.x, p2.y);
}
dx() {
return this.p2.x - this.p1.x;
}
dy() {
return this.p2.y - this.p1.y;
}
length() {
return mhypot(this.dx(), this.dy());
}
// returns a point at a given distance of p1, positive direction beeing towards p2
pointOnRelative(coeff) {
// attention if segment length can be 0
let dx = this.dx();
let dy = this.dy();
return new Point(this.p1.x + coeff * dx, this.p1.y + coeff * dy);
}}
// class Segment
//-----------------------------------------------------------------------------
// one side of a piece
class Side {
constructor() {
this.type = ""; // "d" pour straight line or "z" pour classic
this.points = []; // real points or Bezier curve points
// this.scaledPoints will be added when we know the scale
} // Side
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
reversed() {
// returns a new Side, copy of current one but reversed
const ns = new Side();
ns.type = this.type;
ns.points = this.points.slice().reverse();
return ns;
} // Side.reverse.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0