老师,为什么我这个会一直刷新?
来源:9-3 完成案例动画部分
慕用2417543
2018-10-26 05:44:26
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>example</title>
<style type="text/css">
*{margin:0;padding: 0;}
body,html{width: 100%;height:100%;}
.left{ width:35%;height:100%;background-color:#a4a296;float:left;}
.right{width:65%;height:100%;background-color:#eee9d3;float:left;}
.left form{padding-top: 100px;}
input,button{width: 65%;height: 30px;display: block;border-radius: 15px;margin:30px auto; border: 0;outline:0;padding:0 10px;
}
button{width:25%;background-color:#202020;text-align:center;color:#eee;cursor: pointer;}
canvas{margin:200px 0px 0 200px;}
#canvas{display: none;}
</style>
</head>
<body>
<section class="left">
<form >
<input type="text" name="name" placeholder="姓名" id="name" />
<input type="text" name="address" placeholder="地址" id="address" />
<input type="text" name="job" placeholder="职业" id="job" />
<input type="text" name="slogan" placeholder="口号" id="slogan" />
<button id="generateBtn">生成名片</button>
</form>
</section>
<section class="right">
<canvas id="canvas"></canvas>
<canvas id="canvas1"></canvas>
</section>
<script type="text/javascript">
//离屏
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
ctx.canvas.width = 500;
ctx.canvas.height = 100;
//渐变
var generateBtn = document.getElementById("generateBtn");
generateBtn.onclick = function() {
var linear=ctx.createLinearGradient(0,0,ctx.canvas.width,ctx.canvas.height);
linear.addColorStop(0.5,"black");
linear.addColorStop(1,"#ddd");
ctx.fillStyle=linear;
ctx.fillRect(0,0,ctx.canvas.width,ctx.canvas.height);
//logo
var img=new Image();
img.src="http://climg.mukewang.com/59859f4d00014f1503000100.jpg";
img.onload=function(){ctx.drawImage(img,20,0,90,100,0,0,90,100);}
var name=document.getElementById("name").value||"请输入姓名";
var address=document.getElementById("address").value||"请输入地址";
var job=document.getElementById("job").value||"请输入职业";
//文字
ctx.fillStyle="white";
ctx.font="bold 16px 微软雅黑";
ctx.fillText(name,135,30);
ctx.font="14px 微软雅黑";
ctx.fillText(address,135,55);
ctx.fillText(job,135,80);
var nameWidth,addressWidth,jobWidth,maxWidth=0;
nameWidth=ctx.measureText(name).width;
addressWidth=ctx.measureText(address).width;
jobWidth=ctx.measureText(job).width;
if(maxWidth<nameWidth){maxWidth=nameWidth;}
if(maxWidth<addressWidth){maxWidth=addressWidth;}
if(maxWidth<jobWidth){maxWidth=jobWidth;}
//阴影——文字、曲线
var slogan=document.getElementById("slogan").value||"请输入口号";
ctx.save();
ctx.shadowOffsetX=9;
ctx.shadowOffsetY=6;
ctx.shadowColor='rgba(0,0,0,.4)';
ctx.shadowBlur=2;
//口号
ctx.rotate(-Math.PI/50);
ctx.font="16px 宋体";
ctx.fillStyle="white";
ctx.fill();
//计算口号位置
var solganWidth = ctx.measureText(slogan).width;
var offset = (ctx.canvas.width - 225 - maxWidth -solganWidth) / 2;
ctx.fillText(slogan, 225 + maxWidth + offset, 80);
//曲线
ctx.beginPath();
ctx.moveTo(225 + maxWidth + offset,100);
ctx.quadraticCurveTo(225 + maxWidth + offset,80,225 + maxWidth + offset+solganWidth,80);
ctx.strokeStyle="white";
ctx.stroke();
ctx.restore();}
generateBtn.click();
//小球效果
var canvas1=document.getElementById("canvas1");
var ctx1=canvas1.getContext("2d");
ctx1.canvas.width = 500;
ctx1.canvas.height = 100;
var circles=[];
setInterval(function(){
ctx1.fillRect(0,0,ctx1.canvas.width,ctx1.canvas.height);
ctx1.drawImage(canvas,0,0,ctx.canvas.width,ctx.canvas.height,0,0,ctx1.canvas.width,ctx1.canvas.height);
for(var i=0;i<=10;i++){
if (!circles[i]) {
circles[i]={};
circles[i].radius=Math.floor(Math.random()*5)+1;
circles[i].y=-circles[i].radius-Math.floor(Math.random()*10);
circles[i].x=i*60+Math.floor(Math.random()*10)-5;
circles[i].vy = Math.floor(Math.random() * 5) + 1;
}
ctx1.beginPath();
ctx1.arc(circles[i].x,circles[i].y,circles[i].radius,0,Math.PI*2);
ctx1.fillStyle="rgba(255,255,255,0.5)";
ctx1.fill();
circles[i].y=circles[i].y+circles[i].vy;
if (circles[i].y>ctx1.canvas.height+circles[i].radius*2) {
circles[i]=undefined;
}
}
},100);
</script>
</body>
</html>1回答
因为咋ihtml布局中使用了form表单,button按钮具有提交的作用,所以在js脚本中出发了按钮的点击的事件,form表单也会被提交,并且在代码中使用了click()方法:

并不是上面定义的onclick方法,button按钮本身具有提交功能,click方法会一直触发,所以表单也会被一直提交,就出现了一直刷新的状态。
修改建议:给button按钮添加上type="button",这样这个按钮本身就不具有提交功能了,只是一个普通的按钮,这样通过脚本来触发点击事件就可以了。如下:

自己可以测试一下,祝学习愉快!
相似问题