Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If/Then Javascript显示HTML代码_Javascript_Html_Canvas_If Statement - Fatal编程技术网

If/Then Javascript显示HTML代码

If/Then Javascript显示HTML代码,javascript,html,canvas,if-statement,Javascript,Html,Canvas,If Statement,我有一些html5和javascript代码来创建旋转的轮盘赌。它被分成14个结果。我的问题是,我如何才能得到一些独特的HTML代码来显示每个轮子的结果。例如,如果控制盘在业务上着陆,则控制盘下方将显示一些包含业务信息的文本 这是我的HTML代码,下面是指向一个工作示例的链接: <!--[if IE]><script type="text/javascript" src="/sites/default/files/1010/source/excanvas.js"><

我有一些html5和javascript代码来创建旋转的轮盘赌。它被分成14个结果。我的问题是,我如何才能得到一些独特的HTML代码来显示每个轮子的结果。例如,如果控制盘在业务上着陆,则控制盘下方将显示一些包含业务信息的文本

这是我的HTML代码,下面是指向一个工作示例的链接:

<!--[if IE]><script type="text/javascript" src="/sites/default/files/1010/source/excanvas.js"></script><![endif]-->
<input type="button" value="spin" onclick="spin();" style="float: left;" />
<canvas id="wheelcanvas" width="800" height="750"></canvas>
<script type="application/javascript">
  var colors = ["#B8D430", "#3AB745", "#029990", "#3501CB",
               "#2E2C75", "#673A7E", "#CC0071", "#F80120",
               "#F35B20", "#FB9A00", "#FFCC00", "#FEF200", "#B2DF00", "#5C8300"];
  var classes = ["Business", "Office Education", "Continuing Care Assistant", "Practical Nursing",
                     "Primary Care Paramedic", "Early Childhood Education", "Cooking", "Electrician",
                     "Heavy Equipment Operator", "Industrial Mechanic - Millwright", "Plumbing & Pipefitting", "Truck Driver Training", "Welding", "Power Engineering"];

  var startAngle = 0;
  var arc = Math.PI / 7;
  var spinTimeout = null;

  var spinArcStart = 10;
  var spinTime = 0;
  var spinTimeTotal = 0;

  var ctx;

  function draw() {
    drawRouletteWheel();
  }

  function drawRouletteWheel() {
    var canvas = document.getElementById("wheelcanvas");
    if (canvas.getContext) {
      var outsideRadius = 300;
      var textRadius = 260;
      var insideRadius = 100;

      ctx = canvas.getContext("2d");
      ctx.clearRect(5,0,1000,1000);


      ctx.strokeStyle = "black";
      ctx.lineWidth = 2;

      ctx.font = 'bold 10px sans-serif';

      for(var i = 0; i < 14; i++) {
        var angle = startAngle + i * arc;
        ctx.fillStyle = colors[i];

        ctx.beginPath();
        ctx.arc(400, 400, outsideRadius, angle, angle + arc, false);
        ctx.arc(400, 400, insideRadius, angle + arc, angle, true);
        ctx.stroke();
        ctx.fill();

        ctx.save();
        ctx.shadowOffsetX = -1;
        ctx.shadowOffsetY = -1;
        ctx.shadowBlur    = 0;
        ctx.shadowColor   = "rgb(220,220,220)";
        ctx.fillStyle = "black";
        ctx.translate(400 + Math.cos(angle + arc / 2) * textRadius, 400 + Math.sin(angle + arc / 2) * textRadius);
        ctx.rotate(angle + arc / 2 + Math.PI / 2);
        var text = classes[i];
        ctx.fillText(text, -ctx.measureText(text).width / 2, 0);
        ctx.restore();
      } 

      //Arrow
      ctx.fillStyle = "black";
      ctx.beginPath();
      ctx.moveTo(400 - 4, 400 - (outsideRadius + 5));
      ctx.lineTo(400 + 4, 400 - (outsideRadius + 5));
      ctx.lineTo(400 + 4, 400 - (outsideRadius - 5));
      ctx.lineTo(400 + 9, 400 - (outsideRadius - 5));
      ctx.lineTo(400 + 0, 400 - (outsideRadius - 13));
      ctx.lineTo(400 - 9, 400 - (outsideRadius - 5));
      ctx.lineTo(400 - 4, 400 - (outsideRadius - 5));
      ctx.lineTo(400 - 4, 400 - (outsideRadius + 5));
      ctx.fill();
    }
  }

  function spin() {
    spinAngleStart = Math.random() * 10 + 10;
    spinTime = 0;
    spinTimeTotal = Math.random() * 3 + 4 * 1000;
    rotateWheel();
  }

  function rotateWheel() {
    spinTime += 30;
    if(spinTime >= spinTimeTotal) {
      stopRotateWheel();
      return;
    }
    var spinAngle = spinAngleStart - easeOut(spinTime, 0, spinAngleStart, spinTimeTotal);
    startAngle += (spinAngle * Math.PI / 180);
    drawRouletteWheel();
    spinTimeout = setTimeout('rotateWheel()', 30);
  }

  function stopRotateWheel() {
    clearTimeout(spinTimeout);
    var degrees = startAngle * 180 / Math.PI + 90;
    var arcd = arc * 180 / Math.PI;
    var index = Math.floor((360 - degrees % 360) / arcd);
    ctx.save();
    ctx.font = 'bold 30px sans-serif';
    var text = classes[index]
    ctx.fillText(text, 400 - ctx.measureText(text).width / 2, 400 + 10);
    ctx.restore();
    document.getElementById('wheelResult').innerHTML = 'Test' + text;
  }

  function easeOut(t, b, c, d) {
    var ts = (t/=d)*t;
    var tc = ts*t;
    return b+c*(tc + -3*ts + 3*t);
  }

  draw();
</script>

<p id="wheelResult"></p>

有几种方法可以做到这一点,但这是我要做的。 您可以使用css样式的display:none创建一个div标记,然后使用所需的信息设置它,并根据需要隐藏和显示它

例如:

<script>
    var htmlData = ['<h1>Business</h1><br><span>What is Business?</span><br>...', ...];
    ....
    function spin()
    {
        //Hide description box.
        document.getElementById('idDescriptionBox').style.display = 'none';

        spinAngleStart = Math.random() * 10 + 10;
        ....
    }
    ....
    function stopRotateWheel()
    {
        ....
        //Set description and display it.
        var descriptionBox = document.getElementById('idDescriptionBox');
        descriptionBox.innerHTML = htmlData[index];
        descriptionBox.style.display = 'block';
    }
    ....
</script>
<div id="idDescriptionBox" style="display:none;">
    <!--Description info in here-->
    ....
</div>

您的页面工作正常,您的问题已经实现,问题是什么?它工作正常是的,但我在实现每个不同结果弹出的唯一文本时遇到困难。例如,如果轮子落在业务上,它会显示business yes,但它是从轮子中的javascript获取的。我需要它在后面的页面中调出html代码,它有一个与业务相关的特定描述,而不仅仅是单词business。嗯,我尝试将它嵌入到我的代码中,页面停止工作。这会为每个不同的控制盘结果显示唯一的文本吗?例如,如果他们在业务上着陆,它将显示业务信息,如果他们在管道上着陆,它将显示不同的管道信息?@JeremyBritz这取决于您在htmlData变量中输入的值。将与可能结果相关的不同数据放在该变量的正确指数上,它们对于每个结果都是正确唯一的。不知道为什么它不起作用。JeremyBritz我对它进行了测试,我能想到的唯一一件可能导致它无法工作的事情是,如果你照样复制htmlData变量,但没有完成这一行。你需要像for classes变量一样将所有正确的数据插入htmlData。还有一个问题,有没有办法在控制盘上的文本中添加换行符?@JeremyBritz我想对你会有帮助。只需注意插入该文本的行是ctx.fillTexttext,400-ctx.measureTexttext.width/2400+10;