老师,为什么str的值不会改变,是我获取input值的方法错误了吗?

老师,为什么str的值不会改变,是我获取input值的方法错误了吗?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>案例</title>
    <style>
        #container{
            width:1200px;
            margin:0 auto;
            position:relative;
        }
        canvas{
            display:block;
            background:pink;
            margin:50px auto;
        }
        form{
            width:300px;
            position:absolute;
            top:20px;
            left:50px;
            text-align:center;
        }
        input{
            width:100%;
            height:20px;
            border-radius:15px;
            margin-top:20px;
            text-indent:10px;
            border:none;
            padding:5px;
            outline:none;
        }
        input[type="submit"]{
            width:40%;
            height:30px;
            background:black;
            color:white;
        }
    </style>
</head>
<body>
    <div id="container">
        <canvas id="canvas" width="1200" height="350"></canvas>
        <form>
            <input type="text" name="name" placeholder="姓名" value="123">
            <input type="text" name="address" placeholder="地址">
            <input type="text" name="job" placeholder="职业">
            <input type="text" name="slogan" placeholder="口号">
            <input type="submit" name="submit" value="生成口号" id="submit">
        </form>
    </div>
    
    <script>
        var canvas=document.getElementById("canvas");
        var ctx=canvas.getContext("2d");
        // 保存当前环境
        ctx.save();
        // 左边的矩形
        ctx.fillStyle="#A3A398";
        ctx.strokeRect(0,0,400,350);
        ctx.fillRect(0,0,400,350);
        // 右边的矩形
        ctx.restore();
        ctx.strokeStyle="#A3A398";
        ctx.fillStyle="#EEEAD5";
        ctx.strokeRect(400,0,800,350);
        ctx.fillRect(400,0,800,350);
        ctx.restore();
        // 设置渐变
        var linearGradient=ctx.createLinearGradient(500,0,1100,0);
        linearGradient.addColorStop(0,"#000");
        linearGradient.addColorStop(0.5,"#000");
        linearGradient.addColorStop(1,"rgba(0,0,0,0.1)");
        ctx.fillStyle=linearGradient;
        ctx.strokeStyle="#EEEAD5";
        // 渐变矩形
        ctx.strokeRect(500,100,600,100);
        ctx.fillRect(500,100,600,100);
        // 绘制图形
        // 设置字体旋转图形会受影响?
        var img=new Image();
        img.src="logo.png";
        img.onload=function(){
            ctx.drawImage(img,-385,-110,80,80)
        }
        
        // 插入文字
        var str1="请输入名字";
        var str2="请输入地址";
        var str3="请输入职业";
        var str4="请输入口号";
        // 顺序大小 加粗 字体
        ctx.font ="30px bold"; 
        ctx.fillStyle= "#fff"; 
        ctx.fillText(str1,600,130);
        ctx.restore();
        ctx.font ="20px bold"; 
        ctx.fillStyle= "#fff"; 
        ctx.fillText(str2,600,160);
        ctx.fillText(str3,600,190);
        // 先平移坐标原点再旋转
        ctx.translate(900,160);
        ctx.rotate(-Math.PI/18);
        ctx.fillText(str4,0,0);
        // 点击提交按钮改变文本
        var submit=document.getElementById("submit");
        var input1=document.getElementsByTagName("input")[0];
        var input2=document.getElementsByTagName("input")[1];
        var input3=document.getElementsByTagName("input")[2];
        var input4=document.getElementsByTagName("input")[3];
        var width1=ctx.measureText(str1).width;
        var width2=ctx.measureText(str2).width;
        var width3=ctx.measureText(str3).width;
        // 根据输入的值的长度来改变str4的位置
        if(width1>200||width2>200||width3>200){
            ctx.fillText(str4,Math.max(width1,width2,width3)-200,0);
        }
        submit.onclick=function(){
            str1=input1.value;
            str2=input2.value;
            str3=input3.value;
            str4=input4.value;
            console.log(str1);
        }
        
    </script>
</body>
</html>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你的提交按钮类型为submit,也就是具有提交功能,但是form标签中没有提交的action属性地址,所以提交之后相当于刷新页面,但是在url地址栏中会显示的哦,如下:

http://img1.sycdn.imooc.com//climg/5bc6992c000144e103750276.jpg

http://img1.sycdn.imooc.com//climg/5bc6994a00013a9a09810043.jpg

所以可以阻止一下表单的提交,直接点击按钮改变右侧的内容就可以了。例如:

http://img1.sycdn.imooc.com//climg/5bc69993000197fc04630226.jpg

自己测试下完善下,祝学习愉快~~

  • 慕盖茨1437616 提问者 #1
    老师,阻止表单提交了右侧的内容也不会改变
    2018-10-17 11:45:43
好帮手慕星星 2018-10-17 12:14:47

你这个代码是没有完善的哦,所以不会改变,在点击事件中修改str的值后,代码是不会再去上面执行绘制的,可以参考一下源码中的案例哦:

http://img1.sycdn.imooc.com//climg/5bc6b733000137c903490047.jpg

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师