麻烦老师看下是否正确,谢谢老师
来源:7-8 完成案例阴影和曲线
秋荏苒
2019-09-17 23:17:45
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
color: #acacac;
}
input:-moz-placeholder, textarea:-moz-placeholder {
color: #acacac;
}
input::-moz-placeholder, textarea::-moz-placeholder {
color: #acacac;
}
input:-ms-input-placeholder, textarea:-ms-input-placeholder {
color: #acacac;
}
.wrap {
margin: 100px auto;
width: 1500px;
}
.form-wrap {
width: 500px;
height: 400px;
background: rgb(172, 171, 163);
float: left;
}
.input {
display: block;
width: 400px;
height: 30px;
margin-bottom: 40px;
margin-left: 50px;
border: none;
outline: none;
border-radius: 20px;
text-indent: 20px;
}
.input:first-child {
margin-top: 50px;
}
.btn {
display: block;
width: 100px;
height: 30px;
background: black;
color: #bcbcbc;
border: none;
outline: none;
border-radius: 20px;
margin: 0 auto;
cursor: pointer;
box-shadow: 0 0 3px rgba(0, 0, 0, .7);
}
.btn:hover {
color: white;
}
.btn:active {
box-shadow: none;
}
.canvas-wrap {
width: 1000px;
height: 400px;
background: rgb(240, 237, 220);
float: left;
}
.canvas {
display: block;
/*background: black;*/
margin: 100px auto;
}
</style>
</head>
<body>
<div class="wrap">
<div class="form-wrap">
<input type="text" class="input" id="name" placeholder="姓名" autocomplete="off">
<input type="text" class="input" id="addr" placeholder="地址" autocomplete="off">
<input type="text" class="input" id="job" placeholder="职业" autocomplete="off">
<input type="text" class="input" id="slogan" placeholder="口号" autocomplete="off">
<button class="btn" id="btn">生成名片</button>
</div>
<div class="canvas-wrap">
<canvas class="canvas" id="canvas" width="600" height="100"></canvas>
</div>
</div>
<script>
const canvas = document.querySelector("#canvas"),
name = document.querySelector("#name"),
addr = document.querySelector("#addr"),
job = document.querySelector("#job"),
slogan = document.querySelector("#slogan"),
btn = document.querySelector("#btn"),
ctx = canvas.getContext("2d");
// 绘制画布
function draw(name, addr, job, slogan) {
const lineGradient = ctx.createLinearGradient(400, 0, 600, 100);
lineGradient.addColorStop(0, 'black');
lineGradient.addColorStop(1, 'rgba(181,181,181,0.3)');
ctx.save();
ctx.fillStyle = lineGradient;
ctx.fillRect(0, 0, 600, 100);
const img = new Image();
img.src = 'https://pic.superbed.cn/item/5d80bbc8451253d178487448.png';
img.onload = function () {
ctx.restore();
ctx.drawImage(img, 180, 100, 275, 211, 0, 0, 150, 100)
};
let nameStr = name || "请输入姓名",
addrStr = addr || "请输入地址",
jobStr = job || "请输入职业",
sloganStr = slogan || "请输入口号";
const sloganDistance = 350;
ctx.fillStyle = 'white';
ctx.font = "30px sans-serif";
ctx.fillText(nameStr, 160, 35);
ctx.font = "20px sans-serif";
ctx.fillText(addrStr, 160, 60);
ctx.fillText(jobStr, 160, 85);
let nameStrWidth = ctx.measureText(nameStr).width,
sloganX = sloganDistance + nameStrWidth;
ctx.shadowOffsetX = 10;
ctx.shadowOffsetY = 10;
ctx.shadowColor = 'rgba(0, 0, 0, .7)';
ctx.shadowBlur = 0;
ctx.textAlign = "center";
ctx.rotate(-7 * Math.PI / 180);
ctx.fillText(sloganStr, sloganX, 110);
let sloganWidth = ctx.measureText(sloganStr).width,
curStartX = sloganX - sloganWidth / 2,
curEndX = sloganX + sloganWidth / 2;
ctx.strokeStyle = "white";
ctx.beginPath();
ctx.moveTo(curStartX, 130);
ctx.quadraticCurveTo(curStartX - 5, 115, curEndX, 125);
ctx.stroke();
}
draw();
// 点击事件
btn.onclick = function () {
ctx.clearRect(0, 0, 600, 100);
let nameVal = name.value,
addrVal = addr.value,
jobVal = job.value,
sloganVal = slogan.value;
draw(nameVal, addrVal, jobVal, sloganVal);
};
</script>
</body>
</html>1回答
好帮手慕码
2019-09-18
同学你好!
代码效果实现正确。
如果帮助到了你,欢迎采纳,祝学习愉快~
相似问题