首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >而onmousedown javascript

而onmousedown javascript
EN

Stack Overflow用户
提问于 2017-01-23 00:39:26
回答 2查看 387关注 0票数 1

我正在制作一张世界地图,试图从绿色变成红色,这是在按住鼠标的同时点击的国家的颜色。我可以通过多次点击来改变颜色,但是当我尝试添加while循环时,它就冻结了。你能帮帮我吗?另外,我如何保持颜色循环从绿色到红色?意思是一旦它变成红色,我一直盯着鼠标,它就会变成绿色,依此类推。Heres a fiddle for it

代码语言:javascript
复制
var color = d3.scale.linear().domain([0, 50]).range(["green", "red"]);
var pas = [];
var ismousedown = -1;

country
    .on("mousemove", function(d, i) {

        var mouse = d3.mouse(svg.node()).map(function(d) {
            return parseInt(d);
        });

        tooltip.classed("hidden", false)
            .attr("style", "left:" + (mouse[0] + offsetL) + "px;top:" + (mouse[1] + offsetT) + "px")
            .html(d.properties.name);

    })
    .on("mouseout", function(d, i) {
        tooltip.classed("hidden", true);
    })
    .on("mouseup", function(d, i) {
        ismousedown = 0;
    })
    .on("mouseout", function(d, i) {
        tooltip.classed("hidden", true);
    })
    .on("mousedown", function(d, i) {
        ismousedown = 1;
        while (ismousedown == 1) {
            if (pas[d.id]) {
                pas[d.id]++;
            } else {
                pas[d.id] = 1;
            }

            d3.select(this)
                .classed("active", false)
                .style("fill", function(d, i) {
                    return color(pas[d.id]);
                    return d.properties.color;
                });
        }
    });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-23 23:59:02

我修改了您的解决方案以使用setInterval()。这将每隔N毫秒自动运行一次函数。在此示例中,当鼠标按下时,颜色更新代码将每10ms运行一次(您可以在mousedown函数中对此进行调整)。松开鼠标后,将清除该时间间隔,使其不再运行。

Updated JSFiddle (注意:我还在函数的顶部添加了一些变量)

代码语言:javascript
复制
.on("mousedown", function(d,i) {
  var that = this;
  ismousedown = true;

  colorInterval = window.setInterval(function () {
    // ...
  }, 10); // <== runs every 10 milliseconds
})

.on("mouseup", function(d,i) {
  window.clearInterval(colorInterval);
});
票数 0
EN

Stack Overflow用户

发布于 2017-01-23 01:35:40

您正在使用一个循环,其中您在前面设置了条件变量,因此它始终是'1‘并被阻塞。您根本不需要mousedown变量,因为您的代码已经在.on("mousedown")状态下运行。我还实现了一个有效的while循环。但颜色变化如此之快,以至于你看不到变化的发生。

我建议:

代码语言:javascript
复制
  .on("mousedown", function(d, i) {

      var counter = 0;
      var max_counter = 255;

      while (counter < max_counter) {

          if (pas[d.id]) {

              pas[d.id]++;
          } else {
              pas[d.id] = 1;
          }

          d3.select(this)
              .classed("active", false)
              .style("fill", function(d, i) {
                  return color(pas[d.id]);
                  return d.properties.color; });
          counter++;
      }

  });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41793458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档