Topic: Opera won't be nice to me (Page 1 of 1) |
|
---|---|
Nervous Wreck (II) Inmate From: Portland Oregon |
posted 01-21-2010 19:44
I had this script working a few months ago, but now it's broken in Opera. code: <!DOCTYPE html> <html lang="en"> <head> <style> </style> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title> canvas </title> <script src="excanvas.js"> </script> </head> <body onload="init()"> <script> /*spline globals*/ var spline = false; var gridSize = 10; var baseline = 200; var D_Id = function(Id) { return document.getElementById(Id) } var tds = [-0.06, -0.085, 0.368, -1.036, -0.148, -1.163, -1.204, 2.062, -1.438, -2.013, -2.484, -1.506, 1.645, -3.311, 0.385, -1.046, -3.232, -0.576, -0.409, -2.967, -2.412, -0.163, 0.166, 1.232, 0.232, 1.595, 0.034, -3.767, -0.347, -2.233, -2.066, -0.116, -0.883, 1.359, 0.905, -2.806, -0.568, -1.148, 0.265, 3.106, 1.001, 0.723, 0.55, 3.495, -0.288, -0.154, -1.2, -0.457, -2.081, 0.11, 1.27, -0.959, 1.381, -0.472, -1.686, 0.356, -0.17, 2.034, 0.819, 0.8]; function init() { var canvasX, canvasY, controlPointX, controlPointY; var canvas = D_Id("CanvasGraph"); canvas.onmousedown = function(e) { if (!e) e = window.event; down(e) }; writeCanvasTable(canvas); /*Draw the graph*/ } function down(e) { var startX = parseInt(e.clientX); var startY = e.clientY; if (Math.round((Math.round(e.clientX / 10) / 10) * 100) % 10 == 0) { var indexNum = e.clientX - gridSize; indexNum = Math.round(indexNum / 10) * 10; read = document.getElementById("readout"); with(read.style) { color = "#fff"; zIndex = 100; backgroundColor = "black"; opacity = .45 left = parseInt(e.clientX) + "px" top = -gridSize * tds[indexNum / gridSize] + 210 + "px" filter = "progid:DXImageTransform.Microsoft.Matrix alpha(opacity=40) "; width = "120px"; } read.innerHTML = "Year :" + parseInt((indexNum / gridSize) + 1950) + "<br>Anomaly :" + tds[indexNum / gridSize]; } control = (startX >= canvasX + controlPointX - gridSize * .5 && startX <= canvasX + controlPointX + gridSize * .5 && startY >= canvasY + controlPointY - gridSize * .5 && startY <= canvasY + controlPointY + gridSize * .5) if (control) { canvas.onmousemove = function(e) { move(e) }; canvas.onmouseup = function() { move(e) }; var originalcx = controlPointX; var originalcy = controlPointY; e.stopPropagation(); e.preventDefault(); } } function up(e) { e.stopPropagation() } var lastX = -1, lastY; function move(e) { e.stopPropagation(); var x = e.clientX - canvasX; var y = e.clientY - canvasY; lastX = x; lastY = y; var dx = e.clientX - startX; var dy = e.clientY - startY; if (control) { controlPointX = originalcx + dx; controlPointY = originalcy + dy; } } function writeCanvasTable(canvas) { var read = document.getElementById("readout"); canvasX = canvas.offsetLeft; canvasY = canvas.offsetTop; var ctx = canvas.getContext("2d"); canvas.width = tds.length * gridSize read.style.color = "blue"; read.style.position = "absolute"; var colors = ["#ff0", "#0ff", "#f0f", "#f90", "#0ff", "#f0f"]; var colorsMid = ["#ffa", "#aff", "#faf", "#f9a", "#aff", "#faf"]; var colorsEnd = ["#ee0", "#0ee", "#e0e", "#a80", "#0aa", "#a0a"]; for (var y = 0; y < canvas.offsetHeight; y += 10) { ctx.moveTo(0, y); ctx.lineTo(canvas.offsetWidth, y) }; ctx.strokeStyle = "#ccc"; ctx.stroke(); var spacing, width, height, posx, posy; var basewidth = canvas.offsetWidth / tds.length; spacing = basewidth / tds.length; width = basewidth - spacing; for (i in tds) { height = parseInt(tds[i] * gridSize); posx = (i * basewidth) + spacing / 2; posy = baseline - height; controlPointX = posx; controlPointY = posy; var lingrad = ctx.createLinearGradient(posx, posy, posx + width, posy); var Cvar = 1 //i%colors.length lingrad.addColorStop(0, colors[Cvar]); lingrad.addColorStop(.5, colorsMid[Cvar]); lingrad.addColorStop(1, colorsEnd[Cvar]); ctx.fillStyle = lingrad; ctx.fillRect(posx, posy, width, height); var txt = 1950 + parseInt(i) ctx.save() var font = 'bold helvetica' var Font_size = 6; ctx.fillStyle = "#0000ff" ctx.translate(posx + 6, posy); ctx.shadowBlur = 0; ctx.shadowColor = "#00ffff"; ctx.shadowOffsetX = 0; ctx.shadowOffsetY = 1; ctx.rotate(Math.PI * 2 * -90 / 360) ctx.mozTextStyle = Font_size + "pt " + font; //ctx.mozDrawText(parseInt(dates[i])); ctx.fillText(txt, 0, 0); ctx.restore(); } } function Spline(x1, y1, x2, y2, ctx) { if (x1 == x2 && y1 == y2) { return } var IncX = 0; var IncY = 0; if (Math.abs(x1 - x2) > Math.abs(y1 - y2)) { if (x1 - x2 > 0) { IncX = -1 } else { IncX = 1 } } else { if (y1 - y2 > 0) { IncY = -1 } else { IncY = 1 } } var x = x1; var y = y1; /* ctx.beginPath() ctx.moveTo(x,y) ; ctx.strokeStyle="red" ctx.arc(x+2,y+2,.5,0,Math.PI*2,true); ctx.stroke(); */ /*fill in between the points*/ do { if (IncX == 0) { y += IncY; x = (x2 - x1) * ((y - y1) / (y2 - y1)) + x1 } else { x += IncX; y = (y2 - y1) * ((x - x1) / (x2 - x1)) + y1 } ctx.beginPath() ctx.moveTo(x, y) y >= baseline ? ctx.strokeStyle = "rgba(0,0,255,.3)" : ctx.strokeStyle = "rgba(255,0,0,.3)" ctx.arc(x, y, 1, 0, Math.PI * 2, true); ctx.stroke(); } while (x != x2 || y != y2); } function SplineGraph(dataset) { var then = new Date(); var element = document.getElementById("CanvasGraph"); var ctx = element.getContext('2d'); var xvals = []; var yvals = dataset var point_x = []; var point_y = []; var d_x = []; var d_y = []; var count = 0; for (i = 0; i < yvals.length; i++) { var yval = yvals[i]; if (isNaN(yval)) { continue } point_x[count] = i * gridSize; point_y[count] = baseline - yval * gridSize; count++; } /*ends of curve*/ d_x[0] = point_x[1] - point_x[0]; d_x[count - 1] = point_x[count - 1] - point_x[count - 2]; d_y[0] = point_y[1] - point_y[0]; d_y[count - 1] = point_y[count - 1] - point_y[count - 2]; /*set delta x delta y values*/ for (i = 1; i < count - 1; i++) { d_x[i] = (point_x[i + 1] - point_x[i - 1]) / 2; d_y[i] = (point_y[i + 1] - point_y[i - 1]) / 2 } for (i = 0; i < count - 1; i++) { a2x = 3 * (point_x[i + 1] - point_x[i]) - (2 * d_x[i] + d_x[i + 1]); a3x = 2 * (point_x[i] - point_x[i + 1]) + (d_x[i] + d_x[i + 1]); a2y = 3 * (point_y[i + 1] - point_y[i]) - (2 * d_y[i] + d_y[i + 1]); a3y = 2 * (point_y[i] - point_y[i + 1]) + (d_y[i] + d_y[i + 1]); var oldX = null; var oldY = null; var Iter = 10 for (j = 0; j <= Iter; j++) { t = j / Iter; x = Math.floor(a3x * t * t * t + a2x * t * t + d_x[i] * t + point_x[i]); y = Math.floor(a3y * t * t * t + a2y * t * t + d_y[i] * t + point_y[i]); if (oldX != null) { if (spline = true) { Spline(oldX, oldY, x, y, ctx) } }; oldX = x; oldY = y } } var now = new Date(); document.getElementsByTagName('p')[0].textContent += " " + (now - then) + "ms"; } </script> <canvas id="CanvasGraph" width="500" height="400"> </canvas> <div id="readout" class="tool"> </div> <input type="button" value="load spline" onclick="spline=true;SplineGraph(tds)"> </input> <p> </p> </body> </html> |
Paranoid (IV) Inmate From: Cold Sweden |
posted 01-21-2010 22:30
You have errors in there. In Opera, you can see these by opening the Error Console (Tools > Advanced > Error Console). |
Nervous Wreck (II) Inmate From: Portland Oregon |
posted 01-21-2010 22:31
thanks very much |
Nervous Wreck (II) Inmate From: |
posted 05-31-2011 11:03
Edit TP: spam removed
|