javascript - Change cursor on mousedown fails with SVG on Chrome -


i'm trying change cursor when drag on svg cursor change fires when mouse button released. works perfectly, however, in firefox.

i'm using chrome version 50.0.2661.102 m.

this jquery i'm using:

$('#map')   .mousedown(function(){     $(this).css( 'cursor', 'move' );   })   .mouseup(function(){     $(this).css( 'cursor', 'auto' );   }); 

but code snippet added below works should, yet the fiddle created doesn't, nor actual code on site i'm building.

how can differently chrome works always?

var graph = {  	"nodes":[  		{"name":"1","rating":90,"id":2951},  		{"name":"2","rating":80,"id":654654},  		{"name":"3","rating":80,"id":6546544},  		{"name":"4","rating":1,"id":68987978},  		{"name":"5","rating":1,"id":9878933},  		{"name":"6","rating":1,"id":6161},  		{"name":"7","rating":1,"id":64654},  		{"name":"8","rating":20,"id":354654},  		{"name":"9","rating":50,"id":8494},		  		{"name":"10","rating":1,"id":6846874},  		{"name":"11","rating":1,"id":5487},  		{"name":"12","rating":80,"id":"parfum_kenzo"},  		{"name":"13","rating":1,"id":65465465},  		{"name":"14","rating":90,"id":"jungle_de_kenzo"},  		{"name":"15","rating":20,"id":313514},  		{"name":"16","rating":40,"id":36543614},  		{"name":"17","rating":100,"id":"yann_ya645"},  		{"name":"18","rating":1,"id":97413},  		{"name":"19","rating":1,"id":97414},  		{"name":"20","rating":100,"id":976431231},  		{"name":"21","rating":1,"id":9416},  		{"name":"22","rating":1,"id":998949},  		{"name":"23","rating":100,"id":984941},  		{"name":"24","rating":100,"id":"99843"},  		{"name":"25","rating":1,"id":94915},  		{"name":"26","rating":1,"id":913134},  		{"name":"27","rating":1,"id":9134371}  	],  	"links":[  		{"source":6,"target":5,"value":6, "label":"publishedon"},  		{"source":8,"target":5,"value":6, "label":"publishedon"},  		{"source":7,"target":1,"value":4, "label":"containskeyword"},  		{"source":8,"target":10,"value":3, "label":"containskeyword"},  		{"source":7,"target":14,"value":4, "label":"publishedby"},  		{"source":8,"target":15,"value":6, "label":"publishedby"},  		{"source":9,"target":1,"value":6, "label":"depicts"},  		{"source":10,"target":1,"value":6, "label":"depicts"},  		{"source":16,"target":1,"value":6, "label":"managewebsite"},  		{"source":16,"target":2,"value":5, "label":"managewebsite"},       		{"source":16,"target":3,"value":6, "label":"managewebsite"},  		{"source":16,"target":4,"value":6, "label":"managewebsite"},  		{"source":19,"target":18,"value":2, "label":"postedon"},  		{"source":18,"target":1,"value":6, "label":"childof"},  		{"source":17,"target":19,"value":8, "label":"describes"},  		{"source":18,"target":11,"value":6, "label":"containskeyword"},  		{"source":17,"target":13,"value":3, "label":"containskeyword"},  		{"source":20,"target":13,"value":3, "label":"containskeyword"},  		{"source":20,"target":21,"value":3, "label":"postedon"},  		{"source":22,"target":20,"value":3, "label":"postedon"},  		{"source":23,"target":21,"value":3, "label":"managewebsite"},  		{"source":23,"target":24,"value":3, "label":"managewebsite"},  		{"source":23,"target":25,"value":3, "label":"managewebsite"},  		{"source":23,"target":26,"value":3, "label":"managewebsite"}  	]  }      var margin = {top: -5, right: -5, bottom: -5, left: -5};          var width = 500 - margin.left - margin.right,  	height = 400- margin.top - margin.bottom;            var color = d3.scale.category20();  	  	var force = d3.layout.force()              .charge(-200)              .linkdistance(50)              .size([width + margin.left + margin.right, height + margin.top + margin.bottom]);            var zoom = d3.behavior.zoom()              .scaleextent([1, 10])              .on("zoom", zoomed);            var drag = d3.behavior.drag()              .origin(function(d) { return d; })              .on("dragstart", dragstarted)              .on("drag", dragged)              .on("dragend", dragended);              var svg = d3.select("#map").append("svg")              .attr("width", width + margin.left + margin.right)              .attr("height", height + margin.top + margin.bottom)              .attr("id", "svg")              .append("g")              .attr("transform", "translate(" + margin.left + "," + margin.right + ")")              .call(zoom);            var rect = svg.append("rect")              .attr("width", width)              .attr("height", height)              .style("fill", "none")              .style("pointer-events", "all");            var container = svg.append("g");    //d3.json('http://blt909.free.fr/wd/map2.json', function(error, graph) {                                    force                      .nodes(graph.nodes)                      .links(graph.links)                      .start();                            	      		var link = container.append("g")                          .attr("class", "links")                          .selectall(".link")  			.data(graph.links)                          .enter().append("line")  			.attr("class", "link")  			.style("stroke-width", function(d) { return math.sqrt(d.value); });     		var node = container.append("g")                          .attr("class", "nodes")                          .selectall(".node")  			.data(graph.nodes)  			.enter().append("g")  			.attr("class", "node")                          .attr("cx", function(d) { return d.x; })                          .attr("cy", function(d) { return d.y; })                          .call(drag);  		    		node.append("circle")  			.attr("r", function(d) { return d.weight * 2+ 12; })  			.style("fill", function(d) { return color(1/d.rating); });  		                                     force.on("tick", function() {                      link.attr("x1", function(d) { return d.source.x; })                          .attr("y1", function(d) { return d.source.y; })                          .attr("x2", function(d) { return d.target.x; })                          .attr("y2", function(d) { return d.target.y; });                        node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });                  });                                    var linkedbyindex = {};                  graph.links.foreach(function(d) {                      linkedbyindex[d.source.index + "," + d.target.index] = 1;                  });                    function isconnected(a, b) {                      return linkedbyindex[a.index + "," + b.index] || linkedbyindex[b.index + "," + a.index];                  }    		node.on("mouseover", function(d){                                                    node.classed("node-active", function(o) {                              thisopacity = isconnected(d, o) ? true : false;                              this.setattribute('fill-opacity', thisopacity);                              return thisopacity;                          });                            link.classed("link-active", function(o) {                              return o.source === d || o.target === d ? true : false;                          });                                                    d3.select(this).classed("node-active", true);                          d3.select(this).select("circle").transition()                                  .duration(750)                                  .attr("r", (d.weight * 2+ 12)*1.5);                  })  		  		.on("mouseout", function(d){                                                    node.classed("node-active", false);                          link.classed("link-active", false);                                                d3.select(this).select("circle").transition()                                  .duration(750)                                  .attr("r", d.weight * 2+ 12);                  });              function dottype(d) {            d.x = +d.x;            d.y = +d.y;            return d;          }            function zoomed() {            container.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");          }            function dragstarted(d) {            d3.event.sourceevent.stoppropagation();                        d3.select(this).classed("dragging", true);            force.start();          }            function dragged(d) {                        d3.select(this).attr("cx", d.x = d3.event.x).attr("cy", d.y = d3.event.y);                      }            function dragended(d) {                        d3.select(this).classed("dragging", false);          }    		$('#map')  		  .mousedown(function(){  		    $(this).css( 'cursor', 'move' );  		  })  		  .mouseup(function(){  		    $(this).css( 'cursor', 'auto' );  		  });
.node {    stroke: #fff;    stroke-width: 1.5px;  }    .node-active{    stroke: #555;    stroke-width: 1.5px;  }    .link {    stroke: #555;    stroke-opacity: .3;  }    .link-active {    stroke-opacity: 1;  }    .overlay {    fill: none;    pointer-events: all;  }    #map{      border: 2px #555 dashed;      width:500px;      height:400px;  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>  <body>      <div id="map"></div>  </body>

(sample svg code borrowed http://jsfiddle.net/jsdavi/qvco2ljy/)

you have:

function dragstarted(d) {     d3.event.sourceevent.stoppropagation();      d3.select(this).classed("dragging", true);     force.start(); } 

that call stoppropagation seems prevent mouse down event. unfortunately, changing preventdefault changes how drag&drop works (it moves whole graph around, instead of moving single nodes).

if cursor need change, why not use css that? seem change class of node dragging, should able use following css:

.node.dragging {     cursor: move; } 

if want cursor change when whole graph dragged, can add dragged class #map too:

function dragstarted(d) {     d3.event.sourceevent.stoppropagation();     $("#map").addclass("dragging");     d3.select(this).classed("dragging", true);     force.start(); }  // ...  function dragended(d) {     $("#map").removeclass("dragging");     d3.select(this).classed("dragging", false); } 

and add css that:

#map.dragging {     cursor: move; } 

var graph = {  	"nodes":[  		{"name":"1","rating":90,"id":2951},  		{"name":"2","rating":80,"id":654654},  		{"name":"3","rating":80,"id":6546544},  		{"name":"4","rating":1,"id":68987978},  		{"name":"5","rating":1,"id":9878933},  		{"name":"6","rating":1,"id":6161},  		{"name":"7","rating":1,"id":64654},  		{"name":"8","rating":20,"id":354654},  		{"name":"9","rating":50,"id":8494},		  		{"name":"10","rating":1,"id":6846874},  		{"name":"11","rating":1,"id":5487},  		{"name":"12","rating":80,"id":"parfum_kenzo"},  		{"name":"13","rating":1,"id":65465465},  		{"name":"14","rating":90,"id":"jungle_de_kenzo"},  		{"name":"15","rating":20,"id":313514},  		{"name":"16","rating":40,"id":36543614},  		{"name":"17","rating":100,"id":"yann_ya645"},  		{"name":"18","rating":1,"id":97413},  		{"name":"19","rating":1,"id":97414},  		{"name":"20","rating":100,"id":976431231},  		{"name":"21","rating":1,"id":9416},  		{"name":"22","rating":1,"id":998949},  		{"name":"23","rating":100,"id":984941},  		{"name":"24","rating":100,"id":"99843"},  		{"name":"25","rating":1,"id":94915},  		{"name":"26","rating":1,"id":913134},  		{"name":"27","rating":1,"id":9134371}  	],  	"links":[  		{"source":6,"target":5,"value":6, "label":"publishedon"},  		{"source":8,"target":5,"value":6, "label":"publishedon"},  		{"source":7,"target":1,"value":4, "label":"containskeyword"},  		{"source":8,"target":10,"value":3, "label":"containskeyword"},  		{"source":7,"target":14,"value":4, "label":"publishedby"},  		{"source":8,"target":15,"value":6, "label":"publishedby"},  		{"source":9,"target":1,"value":6, "label":"depicts"},  		{"source":10,"target":1,"value":6, "label":"depicts"},  		{"source":16,"target":1,"value":6, "label":"managewebsite"},  		{"source":16,"target":2,"value":5, "label":"managewebsite"},       		{"source":16,"target":3,"value":6, "label":"managewebsite"},  		{"source":16,"target":4,"value":6, "label":"managewebsite"},  		{"source":19,"target":18,"value":2, "label":"postedon"},  		{"source":18,"target":1,"value":6, "label":"childof"},  		{"source":17,"target":19,"value":8, "label":"describes"},  		{"source":18,"target":11,"value":6, "label":"containskeyword"},  		{"source":17,"target":13,"value":3, "label":"containskeyword"},  		{"source":20,"target":13,"value":3, "label":"containskeyword"},  		{"source":20,"target":21,"value":3, "label":"postedon"},  		{"source":22,"target":20,"value":3, "label":"postedon"},  		{"source":23,"target":21,"value":3, "label":"managewebsite"},  		{"source":23,"target":24,"value":3, "label":"managewebsite"},  		{"source":23,"target":25,"value":3, "label":"managewebsite"},  		{"source":23,"target":26,"value":3, "label":"managewebsite"}  	]  }      var margin = {top: -5, right: -5, bottom: -5, left: -5};          var width = 500 - margin.left - margin.right,  	height = 400- margin.top - margin.bottom;            var color = d3.scale.category20();  	  	var force = d3.layout.force()              .charge(-200)              .linkdistance(50)              .size([width + margin.left + margin.right, height + margin.top + margin.bottom]);            var zoom = d3.behavior.zoom()              .scaleextent([1, 10])              .on("zoom", zoomed);            var drag = d3.behavior.drag()              .origin(function(d) { return d; })              .on("dragstart", dragstarted)              .on("drag", dragged)              .on("dragend", dragended);              var svg = d3.select("#map").append("svg")              .attr("width", width + margin.left + margin.right)              .attr("height", height + margin.top + margin.bottom)              .attr("id", "svg")              .append("g")              .attr("transform", "translate(" + margin.left + "," + margin.right + ")")              .call(zoom);            var rect = svg.append("rect")              .attr("width", width)              .attr("height", height)              .style("fill", "none")              .style("pointer-events", "all");            var container = svg.append("g");    //d3.json('http://blt909.free.fr/wd/map2.json', function(error, graph) {                                    force                      .nodes(graph.nodes)                      .links(graph.links)                      .start();                            	      		var link = container.append("g")                          .attr("class", "links")                          .selectall(".link")  			.data(graph.links)                          .enter().append("line")  			.attr("class", "link")  			.style("stroke-width", function(d) { return math.sqrt(d.value); });     		var node = container.append("g")                          .attr("class", "nodes")                          .selectall(".node")  			.data(graph.nodes)  			.enter().append("g")  			.attr("class", "node")                          .attr("cx", function(d) { return d.x; })                          .attr("cy", function(d) { return d.y; })                          .call(drag);  		    		node.append("circle")  			.attr("r", function(d) { return d.weight * 2+ 12; })  			.style("fill", function(d) { return color(1/d.rating); });  		                                     force.on("tick", function() {                      link.attr("x1", function(d) { return d.source.x; })                          .attr("y1", function(d) { return d.source.y; })                          .attr("x2", function(d) { return d.target.x; })                          .attr("y2", function(d) { return d.target.y; });                        node.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });                  });                                    var linkedbyindex = {};                  graph.links.foreach(function(d) {                      linkedbyindex[d.source.index + "," + d.target.index] = 1;                  });                    function isconnected(a, b) {                      return linkedbyindex[a.index + "," + b.index] || linkedbyindex[b.index + "," + a.index];                  }    		node.on("mouseover", function(d){                                                    node.classed("node-active", function(o) {                              thisopacity = isconnected(d, o) ? true : false;                              this.setattribute('fill-opacity', thisopacity);                              return thisopacity;                          });                            link.classed("link-active", function(o) {                              return o.source === d || o.target === d ? true : false;                          });                                                    d3.select(this).classed("node-active", true);                          d3.select(this).select("circle").transition()                                  .duration(750)                                  .attr("r", (d.weight * 2+ 12)*1.5);                  })  		  		.on("mouseout", function(d){                                                    node.classed("node-active", false);                          link.classed("link-active", false);                                                d3.select(this).select("circle").transition()                                  .duration(750)                                  .attr("r", d.weight * 2+ 12);                  });              function dottype(d) {            d.x = +d.x;            d.y = +d.y;            return d;          }            function zoomed() {            container.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");          }            function dragstarted(d) {            d3.event.sourceevent.stoppropagation();            $("#map").addclass("dragging");            d3.select(this).classed("dragging", true);            force.start();          }            function dragged(d) {                        d3.select(this).attr("cx", d.x = d3.event.x).attr("cy", d.y = d3.event.y);                      }            function dragended(d) {            $("#map").removeclass("dragging");            d3.select(this).classed("dragging", false);          }
.node {    stroke: #fff;    stroke-width: 1.5px;  }    .node.dragging,  #map.dragging {    cursor: move;  }    .node-active{    stroke: #555;    stroke-width: 1.5px;  }    .link {    stroke: #555;    stroke-opacity: .3;  }    .link-active {    stroke-opacity: 1;  }    .overlay {    fill: none;    pointer-events: all;  }    #map{      border: 2px #555 dashed;      width:500px;      height:400px;  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>  <body>      <div id="map"></div>  </body>


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo