Using Raphael javascript for hovering with arrays -
using raphael, i'm trying shape appear when hover on invisible area near shape. following code not work - going wrong? each shape has 2 raphael paths associated it: 1 visible shape, , other invisible area.
<script type="text/javascript" charset="utf-8">  $("document").ready(function() {         var rm  = raphael("canvas", 1000, 500);          var attr = {     // visible shapes             fill: "#bbb",      "fill-opacity": 1,             stroke: "#222",    "stroke-width": 0.3,         };         var attr2 = {    // invisible hovering areas             fill: "green",     "fill-opacity": 0.0,             stroke: "red",     "stroke-width": 0,         };         var things = {};          /* square */    things.square     = [ rm.path("m 154.21525,71.431259 74.32805,0 0,70.496711 -74.32805,0 0,-70.496711 z").attr(attr),                                               rm.path("m 271.25132,77.933263 58.07304,0 0,56.409037 -58.07304,0 0,-56.409037 z").attr(attr2)   ];         /* triangle */  things.triangle   = [ rm.path("m 154.02932,222.44063 36.78089,-58.23641 34.48208,58.2364 -71.26297,1e-5").attr(attr),                                               rm.path("m 271.25132,165.71032 58.07304,0 0,56.40903 -58.07304,0 0,-56.40903 z").attr(attr2)   ];         (var shape in things) {             shape[0].color = raphael.getcolor();  shape[1].onmouseover = function () {  shape[0].animate({fill:shape[0].color, stroke:"#ccc"}, 500);  document.getelementbyid(shape)[0].style.display = "block";  shape[0].tofront();   r.safari(); }; shape[1].onmouseout = function () {  shape[0].animate({fill:"#bbb", stroke:"#222"}, 500);  document.getelementbyid(shape)[0].style.display = "none";  shape[0].tofront();   r.safari(); };         } // end every member of things     }); // end document ready function </script>   the example on raphael website uses more complicated javascript: http://raphaeljs.com/australia.html
i didn't use code because don't understand function syntax use:
(function (a, b) {     ---- })(c, d);   but still don't see what's wrong version! help!
for (var shape in things) { ...   this not behave foreach, instead behaves more perls:
foreach $shape (keys $things) { ...   so code should be:
for (var shape in things) {     things[shape][0].color = raphael.getcolor();     ...   additional answer
as function syntax, it's rather simple , common in modern js code should familiarize it. let's construct function step step.
we know:
function foo (x,y) {};   declares function, in javascript functions can anonymous:
function (x,y) {};   is function no name. now, in declaration, rather useless if in expression yields reference function. how make expression? put = sign left of it:
var foo = function (x,y) {}   is function expression assigning function variable foo.
apart being right of = sign, there other places code considered expressions. 1 of them when code happens inside braces. comes math really:
var x = * (b + c);   everything right hand side of = sign expression (b+c) special because sub-expression evaluated first. it's () syntax makes b+c expression in own right. similarly:
(function (x,y) {})   forces looks function declaration become function expression. rule comes math expression earlier.
as mentioned earlier, function expression evaluates function reference. , 1 of things can function reference use call function:
var foo = function (x,y) {}; foo();   here, () after foo means different: used make function call. since can make function call using function reference , since function expression evaluates function reference can call function without assigning variable:
(function (x,y) {})();  // think of foo() foo=(function(x,y){})      
Comments
Post a Comment