threejs打造一个三维铅笔签字绘画签名效果代码
代码语言:html
所属分类:三维
代码描述:threejs打造一个三维铅笔签字绘画签名效果代码,可保存为png图片,支持手机端
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
#mfPreviewBar {
display: none !important;
}
html,
body {
position: fixed;
overflow: hidden;
touch-action: none;
}
body {
background-color: #f7f4f0;
cursor: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDAgNzkuMTYwNDUxLCAyMDE3LzA1LzA2LTAxOjA4OjIxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+LUNEtwAAAGpJREFUGJVjYKA2YIQxwkOD2RgYGLoZGBhioOKLGRgYSleuXvuLgYGBgQVJUxcDA0MeEj+PgYHhOwMDQwUDAwMDE5JELBYbU2EMJiySWAGywsVY5OfAGMhuLGOAeALmhMUMDAy1xNpIOgAAHRcM2lSVkMMAAAAASUVORK5CYII="), auto;
font-family: "Galano Grotesque Semi Bold";
margin: 0;
overflow: hidden;
}
button {
font-family: "Galano Grotesque Semi Bold";
}
.colours {
bottom: 90px;
display: none;
left: 50%;
list-style-type: none;
padding-left: 0;
position: absolute;
transform: translateX(-50%);
z-index: 10;
}
@media (min-width: 1024px) {
.colours {
display: flex;
}
}
.colours li {
border-radius: 50%;
display: inline-block;
height: 14px;
margin: 0 12px;
width: 14px;
}
.colours li:nth-child(1) {
background-color: #100c08;
}
.colours li:nth-child(2) {
background-color: #759BA9;
}
.colours li:nth-child(3) {
background-color: #77dd77;
}
.colours li:nth-child(4) {
background-color: #ff6961;
}
.colours li:nth-child(5) {
background-color: #ffd1dc;
}
.pencil__border {
bottom: 0;
left: 0;
pointer-events: none;
position: absolute;
right: 0;
top: 0;
z-index: 3;
}
.pencil__border div:nth-child(1), .pencil__border div:nth-child(2) {
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
.pencil__border div:nth-child(1):before, .pencil__border div:nth-child(1):after, .pencil__border div:nth-child(2):before, .pencil__border div:nth-child(2):after {
background-color: #FF851B;
content: "";
opacity: 0.98;
position: absolute;
}
.pencil__border div:nth-child(1):before {
height: 20px;
left: 20px;
top: 0;
width: 100%;
}
@media (min-width: 1024px) {
.pencil__border div:nth-child(1):before {
height: 60px;
left: 55px;
}
}
.pencil__border div:nth-child(1):after {
bottom: 60px;
height: 100%;
left: 0;
width: 20px;
}
@media (min-width: 1024px) {
.pencil__border div:nth-child(1):after {
bottom: 80px;
width: 55px;
}
}
.pencil__border div:nth-child(2):before {
bottom: 0;
right: 20px;
height: 60px;
width: 100%;
}
@media (min-width: 1024px) {
.pencil__border div:nth-child(2):before {
height: 80px;
right: 55px;
}
}
.pencil__border div:nth-child(2):after {
bottom: 0;
height: 100%;
right: 0;
width: 20px;
}
@media (min-width: 1024px) {
.pencil__border div:nth-child(2):after {
bottom: -60px;
width: 55px;
}
}
.pencil__border-inner {
border: solid 1px #000;
border-width: 2px;
border-style: solid;
bottom: 58px;
left: 19px;
position: absolute;
right: 19px;
top: 19px;
}
@media (min-width: 1024px) {
.pencil__border-inner {
bottom: 78px;
left: 54px;
right: 54px;
top: 58px;
}
}
.pencil__refresh {
background-color: #FCF4EA;
border: none;
border-radius: 50%;
bottom: 18px;
cursor: pointer;
height: 26px;
padding: 4px 1px 0px;
position: absolute;
left: 50%;
text-align: center;
transform: translateX(-50%);
width: auto;
z-index: 3;
}
@media (min-width: 1024px) {
.pencil__refresh {
bottom: 27px;
left: 80px;
transform: none;
}
}
.pencil__submit {
bottom: 27px;
display: none;
position: absolute;
right: 80px;
z-index: 4;
}
@media (min-width: 1024px) {
.pencil__submit {
display: block;
}
}
.btn {
background-color: transparent;
border: none;
cursor: pointer;
font-size: 13px;
letter-spacing: 0.15em;
outline: none;
padding: 5px 10px 1px 10px;
text-transform: uppercase;
user-select: none;
-moz-user-select: none;
}
</style>
</head>
<body>
<!-- partial:index.partial.html -->
<ul class="colours">
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
<div class="pencil__border">
<div></div>
<div></div>
<div class="pencil__border-inner"></div>
</div>
<button class="pencil__refresh btn">
刷新
</button>
<button class="pencil__submit btn">保存PNG</button>
<!-- partial -->
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/three.84.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/MTLLoader.min.js"></script>
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/OBJLoader.min.js"></script>
<script>
// -- Drawing
const colors = [
"#100c08",
"#759BA9",
"#77dd77",
"#ff6961",
"#ffd1dc"];
let currentColorIndex = 0;
let colorButtons = document.querySelectorAll('.colours li'),
colorButtonsL = colorButtons.length;
for (var x = 0; x < colorButtonsL; x++) {
(x => {
colorButtons[x].addEventListener('click', () => {
setActiveColour(x);
});
})(x);
}
function setActiveColour(x) {
currentColorIndex = x;
}
// -- Drawing
const drawingCanvas = document.createElement('canvas');
drawingCanvas.width = window.innerWidth;
drawingCanvas.height = window.innerHeight;
drawingCanvas.style.position = 'fixed';
drawingCanvas.style.left = 0;
drawingCanvas.style.top = 0;
drawingCan.........完整代码请登录后点击上方下载按钮下载查看
网友评论0