我正在为Sharepoint 2010编写Visual WebPart,我需要使用HTML5 canvas。
document.getElementById("testDiv").innerHTML = '<a href="http://c-blues.com">Right</a>';
ctx = canvas.getContext("2d");
cxt.fillStyle="#000000;
cxt.fillRect(0,0,150,75);
但是有错误:
运行时错误Microsoft JScript:Object不支持属性或方法“getContext”
当我尝试在ASP.NET Web应用程序中使用此代码时&lt;它的工作正常。怎么了?\
P.S:所有代码:
<!DOCTYPE HTML>
<style type="text/css">
.clocks {
height: 500px;
margin: 25px auto;
position: relative;
width: 500px;
}
var canvas;
var ctx;
var clockRadius = 250;
var clockImage;
// функции отрисовки :
function clear() { // очистка
ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
}
function drawScene() { // основная функция drawScene
clear(); // очистка канвы
// получение текущего времени
var date = new Date();
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
hours = hours > 12 ? hours - 12 : hours;
var hour = hours + minutes / 60;
var minute = minutes + seconds / 60;
// сохранение
ctx.save();
// отрисовка часов (как бэк)
ctx.drawImage(clockImage, 0, 0, 500, 500);
ctx.translate(canvas.width / 2, canvas.height / 2);
ctx.beginPath();
// отрисовка чисел
ctx.font = '36px Arial';
ctx.fillStyle = '#000';
ctx.textAlign = 'center';
ctx.textBaseline = 'middle';
for (var n = 1; n <= 12; n++) {
var theta = (n - 3) * (Math.PI * 2) / 12;
var x = clockRadius * 0.7 * Math.cos(theta);
var y = clockRadius * 0.7 * Math.sin(theta);
ctx.fillText(n, x, y);
}
// часы
ctx.save();
var theta = (hour - 3) * 2 * Math.PI / 12;
ctx.rotate(theta);
ctx.beginPath();
ctx.moveTo(-15, -5);
ctx.lineTo(-15, 5);
ctx.lineTo(clockRadius * 0.5, 1);
ctx.lineTo(clockRadius * 0.5, -1);
ctx.fill();
ctx.restore();
// минуты
ctx.save();
var theta = (minute - 15) * 2 * Math.PI / 60;
ctx.rotate(theta);
ctx.beginPath();
ctx.moveTo(-15, -4);
ctx.lineTo(-15, 4);
ctx.lineTo(clockRadius * 0.8, 1);
ctx.lineTo(clockRadius * 0.8, -1);
ctx.fill();
ctx.restore();
// секунды
ctx.save();
var theta = (seconds - 15) * 2 * Math.PI / 60;
ctx.rotate(theta);
ctx.beginPath();
ctx.moveTo(-15, -3);
ctx.lineTo(-15, 3);
ctx.lineTo(clockRadius * 0.9, 1);
ctx.lineTo(clockRadius * 0.9, -1);
ctx.fillStyle = '#0f0';
ctx.fill();
ctx.restore();
ctx.restore();
}
function init() {
canvas = document.getElementById("canvas");
if (canvas.getContext) {
document.getElementById("testDiv").innerHTML = '<a href="http://c-blues.com">Right</a>';
ctx = canvas.getContext("2d");
clockImage = new Image();
// setInterval(drawScene, 1000);
cxt.fillStyle="Red";
cxt.fillRect(0,0,150,75);
}
else {
ctx = canvas.getContext("2d");
cxt.fillStyle="Green";
cxt.fillRect(0,0,150,75);
document.getElementById("testDiv").innerHTML = '<a href="http://c-blues.com">Error</a>';
}
}
// инициализация
window.onload = init;
</script>
<div class="clocks">
<canvas id="canvas" width="500" height="500">
</canvas>
答案 0 :(得分:1)
您使用的浏览器似乎不支持<canvas>
元素。您发布的错误只显示对象(画布)不支持方法getContext
。
请参阅this post,其中介绍了如何检查浏览器是否支持canvas
。实际上,答案中包含您尝试使用的代码检测是否支持画布 - 在您的情况下,画布似乎不支持:
function isCanvasSupported(){
var elem = document.createElement('canvas');
return !!(elem.getContext && elem.getContext('2d'));
}
答案 1 :(得分:0)
ctx = canvas.getContext("2d");
cxt.fillStyle="#000000;
ctx 和 cxt =)
正确
ctx.fillStyle="#000000;