Raphael 2.1.4 的简单时钟
Simple Clock with Raphael 2.1.4
这里是新手,我有一个基于教程的 Raphael 2.1.4 的简单时钟,页面上的所有内容都可以很好地呈现,但手柄不旋转。然而,它似乎适用于拉斐尔 1.5.X.
你能告诉我我做错了什么吗?
附码笔页
http://codepen.io/scorpion_rain/pen/dGrmQj
代码JS:
window.onload = 函数() {
var cWidth = 800, cHeight = 600;
var paper = new Raphael(document.getElementById('canvas_container'), cWidth, cHeight);
var clockBgX = 200, clockBgY = 300, clockBgRadius = 100;
var cBgCol = '#f5f5f5', cBgStrokeCol = '#444444', cBgStrokeWidth = '5';
var centerDialX = clockBgX, centerDialY = clockBgY;
var hourHandStrokeCol = "#444444", hourHandStrokeWidth = "5";
var minuteHandStrokeCol = "#444444", minuteHandStrokeWidth = "3";
var secondsHandStrokeCol = "#444444", secondsHandStrokeWidth = "2";
var pinDotX = clockBgX, pinDotY = clockBgY, pinDotRadius = 5, pinDotFill = "#000000";
// main clock background and number display
function mainClockBg(){
var clockBg = paper.circle(clockBgX, clockBgY, clockBgRadius); // outer circle
clockBg.attr({ "fill": cBgCol, // inner background
"stroke": cBgStrokeCol,
"stroke-width": cBgStrokeWidth })
var radius = Math.PI / 180; // converting from degrees to radian
var cx = centerDialX; // center of dial - horizontal
var cy = centerDialY; // center of dial - vertical
var r = 90; // radius distance
var startA = -90; // start of numbers
var angle = 30; // distance between numbers | 12/360 = 12 stops
var x; // circle distance inner marker
var y; // circle distance outer marker
var endA; // end of text
// adding numbers to the dial
for(i = 1; i < 13; i++){
endA = startA + angle;
x = cx + r * Math.cos( endA * radius );
y = cy + r * Math.sin( endA * radius );
paper.text( x, y, i + "" );
startA = endA;
}
}
function dialsDisplay(){
var hourHand = paper.path("M200, 300L200, 230");
hourHand.attr({
"stroke": hourHandStrokeCol,
"stroke-width": hourHandStrokeWidth
});
var minuteHand = paper.path("M200, 300L200, 220");
minuteHand.attr({
"stroke": minuteHandStrokeCol,
"stroke-width": minuteHandStrokeWidth
})
var secondsHand = paper.path("M200, 300L200, 216");
secondsHand.attr({
"stroke": secondsHandStrokeCol,
"stroke-width": secondsHandStrokeWidth
})
var pinDot = paper.circle(pinDotX, pinDotY, pinDotRadius);
pinDot.attr({
"fill": pinDotFill
});
updateClock();
setInterval("updateClock()", 1000);
}
function updateClock(){
var time = new Date();
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
hourHand.rotate( 30 * hours + (minutes / 2.5), 200, 300 );
minuteHand.rotate( 6 * minutes, 200, 300 );
secondsHand.rotete(6 * seconds, 200, 300);
}
mainClockBg();
dialsDisplay();
}
在浏览器的控制台中我收到错误 'cant find variable hourHand'
感谢任何帮助
干杯。
您在一个函数中用 'var' 定义一个变量,然后在另一个函数中引用它,这设置了作用域。
Javascript 具有功能范围,因此一个函数不会知道一个变量,除非它在它可以访问的范围内定义。所以将 hourHand、minuteHand、secondsHand 移到函数之外。然后 updateClock 方法将能够访问这些变量。
// THIS WONT WORK
function func1() {
var hand = 1;
}
function func2() {
var test = hand; //hand was declared in other function, so not available here
}
所以试试这个表格
var hand;
function func1() {
hand = 1;
}
function func2() {
var test = hand;
}
你也会想要
setInterval(updateClock, 1000);
而不是
setInterval("updateClock()", 1000);
因为 setInterval 需要一个函数来调用,而不是一个字符串来执行。
那我猜你的手的移动有问题,你需要调整:)。
这里是新手,我有一个基于教程的 Raphael 2.1.4 的简单时钟,页面上的所有内容都可以很好地呈现,但手柄不旋转。然而,它似乎适用于拉斐尔 1.5.X.
你能告诉我我做错了什么吗?
附码笔页 http://codepen.io/scorpion_rain/pen/dGrmQj
代码JS: window.onload = 函数() {
var cWidth = 800, cHeight = 600;
var paper = new Raphael(document.getElementById('canvas_container'), cWidth, cHeight);
var clockBgX = 200, clockBgY = 300, clockBgRadius = 100;
var cBgCol = '#f5f5f5', cBgStrokeCol = '#444444', cBgStrokeWidth = '5';
var centerDialX = clockBgX, centerDialY = clockBgY;
var hourHandStrokeCol = "#444444", hourHandStrokeWidth = "5";
var minuteHandStrokeCol = "#444444", minuteHandStrokeWidth = "3";
var secondsHandStrokeCol = "#444444", secondsHandStrokeWidth = "2";
var pinDotX = clockBgX, pinDotY = clockBgY, pinDotRadius = 5, pinDotFill = "#000000";
// main clock background and number display
function mainClockBg(){
var clockBg = paper.circle(clockBgX, clockBgY, clockBgRadius); // outer circle
clockBg.attr({ "fill": cBgCol, // inner background
"stroke": cBgStrokeCol,
"stroke-width": cBgStrokeWidth })
var radius = Math.PI / 180; // converting from degrees to radian
var cx = centerDialX; // center of dial - horizontal
var cy = centerDialY; // center of dial - vertical
var r = 90; // radius distance
var startA = -90; // start of numbers
var angle = 30; // distance between numbers | 12/360 = 12 stops
var x; // circle distance inner marker
var y; // circle distance outer marker
var endA; // end of text
// adding numbers to the dial
for(i = 1; i < 13; i++){
endA = startA + angle;
x = cx + r * Math.cos( endA * radius );
y = cy + r * Math.sin( endA * radius );
paper.text( x, y, i + "" );
startA = endA;
}
}
function dialsDisplay(){
var hourHand = paper.path("M200, 300L200, 230");
hourHand.attr({
"stroke": hourHandStrokeCol,
"stroke-width": hourHandStrokeWidth
});
var minuteHand = paper.path("M200, 300L200, 220");
minuteHand.attr({
"stroke": minuteHandStrokeCol,
"stroke-width": minuteHandStrokeWidth
})
var secondsHand = paper.path("M200, 300L200, 216");
secondsHand.attr({
"stroke": secondsHandStrokeCol,
"stroke-width": secondsHandStrokeWidth
})
var pinDot = paper.circle(pinDotX, pinDotY, pinDotRadius);
pinDot.attr({
"fill": pinDotFill
});
updateClock();
setInterval("updateClock()", 1000);
}
function updateClock(){
var time = new Date();
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
hourHand.rotate( 30 * hours + (minutes / 2.5), 200, 300 );
minuteHand.rotate( 6 * minutes, 200, 300 );
secondsHand.rotete(6 * seconds, 200, 300);
}
mainClockBg();
dialsDisplay();
}
在浏览器的控制台中我收到错误 'cant find variable hourHand'
感谢任何帮助 干杯。
您在一个函数中用 'var' 定义一个变量,然后在另一个函数中引用它,这设置了作用域。
Javascript 具有功能范围,因此一个函数不会知道一个变量,除非它在它可以访问的范围内定义。所以将 hourHand、minuteHand、secondsHand 移到函数之外。然后 updateClock 方法将能够访问这些变量。
// THIS WONT WORK
function func1() {
var hand = 1;
}
function func2() {
var test = hand; //hand was declared in other function, so not available here
}
所以试试这个表格
var hand;
function func1() {
hand = 1;
}
function func2() {
var test = hand;
}
你也会想要
setInterval(updateClock, 1000);
而不是 setInterval("updateClock()", 1000);
因为 setInterval 需要一个函数来调用,而不是一个字符串来执行。
那我猜你的手的移动有问题,你需要调整:)。