Javascript-在按下键后保持按下状态(返回true)

Javascript - after pressing the Key stays in a pressed state (returns true)

本文关键字:返回 true 状态 Javascript-      更新时间:2023-11-10

您必须首先单击anyare,这样才能注册shift pressing。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html>
<head>
  <title>Display Coloring</title>
  <script src="jquery-2.2.1.min.js"></script>
  <style type="text/css">
    div {
      background-color: rgb(0, 0, 0);
      width: 20px;
      height: 20px;
      left: 0;
      top: 0;
      bottom: 0;
      line-height: 0;
      margin: 0;
      padding: 0;
      display: inline-block;
      float: left;
    }
    body {
      top: 0;
      left: 0;
      bottom: 0;
      margin: 0;
      padding: 0;
      margin: 0;
      width: 1920px;
      height: 1080px;
    }
    div:hover {
      background-color: rgb(0, 0, 0);
      background-color: rgba(255, 0, 0, 0.5);
    }
    input {
      float: left;
      width: 20px;
      height: 20px;
      top: 0;
      left: 0;
      bottom: 0;
      padding: 0;
      -webkit-appearance: none;
      background-color: rgba(0, 0, 0, 0);
      box-shadow: none !important;
      outline: none;
      border: none;
      word-spacing: 0;
      letter-spacing: 0;
    }
    #conDiv {
      width: 1920px;
      height: 1080px;
      background-color: transparent;
      position: absolute;
      z-index: 1;
    }
    #conInput {
      width: 1920px;
      height: 1080px;
      position: absolute;
      z-index: -1;
    }
  </style>
</head>
<body>
  <script>
    var body = document.body;
    a = [];
    b = [];
    c = [];
    i = [];
    d = [];
    clicked = [];
    altDown = false;
    window.onload = function() {
      conInput = document.createElement('div');
      conInput.setAttribute('id', 'conInput');
      document.body.appendChild(conInput);
      conDiv = document.createElement('div');
      conDiv.setAttribute('id', 'conDiv');
      document.body.appendChild(conDiv);
      //for(u=0;u<1911;u+=10){
      for (u = 0; u < 1901; u += 20) {
        a.push(u);
        for (v = 0; v < 1061; v += 20) {
          //for(v=0; v<1071; v+=10){
          b.push(v);
          var newDiv = document.createElement("div");
          newDiv.id = b.length - 1;
          conDiv.appendChild(newDiv);
        }
      }
      //for(u=0;u<1911;u+=10){
      //	for(v=0; v<1071; v+=10){
      for (u = 0; u < 1901; u += 20) {
        for (v = 0; v < 1061; v += 20) {
          c.push(v);
          var newInput = document.createElement("input");
          newInput.setAttribute('type', 'color');
          newInput.id = c.length - 1;
          conInput.appendChild(newInput);
        }
      }
      function marking() {
        $("body").on("keydown keyup", function(event) {
          if (event.type == "keydown") {
            console.log(event.type);
            $('div').hover(function() {
              if (event.keyCode == 16 && this.id !== "conDiv" && this.id !== "conInput") {
                clicked.push(this);
                this.style.backgroundColor = "#b3ffb3";
                console.log(event);
              }
            })
          } else {
            console.log(event);
            $('div').hover(function() {
              if (event.keyCode == 16) {
                //if()		    		
                if (this.id !== "conDiv" && this.id !== "conInput") {
                  this.style.backgroundColor = "#000000";
                  //console.log(event.shiftKey);
                }
              }
            })
          }
        })
      }
      function changeColor() {
        divs = body.getElementsByTagName('div');
        inputs = body.getElementsByTagName('input');
        for (var l = 0; l < inputs.length; l++) {
          if (inputs[l].id !== "conInput") {
            i.push(inputs[l]);
          }
        }
        for (var k = 0; k < divs.length; k++) {
          if (divs[k].id !== "conDiv" && divs[k].id !== "conInput") {
            d.push(divs[k]);
          }
        }
        $(document).ready(function() {
          $("body").bind("keydown", function(event) {
            if (event.altKey) {
              for (var h in d) {
                //if(d[h].id == "10272" && altDown == false){
                if (d[h].id == "2544" && altDown == false) {
                  d[h].style.opacity = "0.4";
                  altDown = true;
                }
                //else if(d[h].id == "10272" && altDown == true) {
                else if (d[h].id == "2544" && altDown == true) {
                  d[h].style.opacity = "1";
                  altDown = false;
                }
              }
            }
          });
        });
        $('div').on('click', function() {
          if (this.id != "conDiv" && this.id != "conInput") {
            if (event.ctrlKey) {
              clicked.push(this);
              for (var h in d) {
                if (d[h].id == this.id) {
                  $(d[h]).css('background-color', 'rgba(255, 255, 102, 0.8)');
                }
              }
            } else if (clicked.length > 0) {
              for (var clk in clicked) {
                target = document.getElementById(this.id);
                $(target).click();
                $(target).on('change', function() {
                  newColor = this.value;
                  parsed = newColor.charAt(0) == "#" ? newColor.substring(1, 7) : newColor;
                  r = parseInt(parsed.substring(0, 2), 16).toString();
                  g = parseInt(parsed.substring(2, 4), 16).toString();
                  b = parseInt(parsed.substring(4, 6), 16).toString();
                  newColorRGB = "(" + r + ", " + g + ", " + b + ")";
                  for (clk in clicked) {
                    clicked[clk].style.backgroundColor = newColor;
                    clicked[clk].setAttribute("title", newColorRGB);
                  }
                  clicked = [];
                });
              }
            } else if (clicked.length == 0) {
              for (var z in i) {
                if (i[z].id == this.id) {
                  target = document.getElementById(this.id);
                  $(target).click();
                  $(target).on('change', function() {
                    newColor = this.value;
                    parsed = newColor.charAt(0) == "#" ? newColor.substring(1, 7) : newColor;
                    r = parseInt(parsed.substring(0, 2), 16).toString();
                    g = parseInt(parsed.substring(2, 4), 16).toString();
                    b = parseInt(parsed.substring(4, 6), 16).toString();
                    newColorRGB = "(" + r + ", " + g + ", " + b + ")";
                    for (var h in d) {
                      if (d[h].id == this.id) {
                        d[h].style.backgroundColor = newColor;
                        d[h].setAttribute("title", newColorRGB);
                      }
                    }
                  });
                }
              }
            }
          }
        });
      }
      changeColor();
      marking();
    }
  </script>
</body>
</html>

如果我按下shiftKey,它会工作,div会得到它们的颜色,但如果我释放shiftKey,状态会保持true,并且它会保持颜色,直到刷新。

这是代码:

function marking(){
$("body").bind("keydown", function(event) {
    $('div').hover(function(){
        if(event.shiftKey){         
            if(this.id !== "conDiv" && this.id !== "conInput"){
            clicked.push(this);
            this.style.backgroundColor = "#b3ffb3";
            console.log(event.shiftKey);
            }
        }
        else{};
        }
    })
});

}

我能告诉程序在释放shiftKey时做出反应吗?

更新

$("body").on("keydown keyup", function(event) {
       if(event.type == "keydown"){
            $('div').hover(function(){
                if(event.keyCode == 16 && this.id !== "conDiv" && this.id !== "conInput"){  
                clicked.push(this);
                this.style.backgroundColor = "#b3ffb3";
                console.log(event);
                }                           
            })
       }
       else{
            console.log(event);
            $('div').hover(function(){
                if(event.keyCode == 16){                    
                    if(this.id !== "conDiv" && this.id !== "conInput"){
                    this.style.backgroundColor = "#000000";
                    }
                }
            })
       }
})

现在,它将shiftKey上的颜色更改为#000000,并将keyup的颜色改为#000000。但它仍然停留在键下,如果我将鼠标悬停在div上,它会将对象推入我的数组,而不会着色。

我希望它在按下Shift键时着色,而在释放Shift键时不执行任何操作。

我错过了什么?

您似乎需要的是mousemove事件和shiftKey event property

现在的一个问题是,您没有取消设置悬停处理程序,该处理程序是在按下shift时设置的。

主要区别在于

  function marking() {
    $("body").on("mousemove", "div", function(event) {
        if (event.shiftKey) {
             this.style.backgroundColor "#b3ffb3";
        }
    })
  }

我已经在下面修改了你的代码

<!doctype html>
<html>
<head>
  <title>Display Coloring</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <style type="text/css">
    div {
      background-color: rgb(0, 0, 0);
      width: 20px;
      height: 20px;
      left: 0;
      top: 0;
      bottom: 0;
      line-height: 0;
      margin: 0;
      padding: 0;
      display: inline-block;
      float: left;
    }
    body {
      top: 0;
      left: 0;
      bottom: 0;
      margin: 0;
      padding: 0;
      margin: 0;
      width: 1920px;
      height: 1080px;
    }
    div:hover {
      background-color: rgb(0, 0, 0);
      background-color: rgba(255, 0, 0, 0.5);
    }
    input {
      float: left;
      width: 20px;
      height: 20px;
      top: 0;
      left: 0;
      bottom: 0;
      padding: 0;
      -webkit-appearance: none;
      background-color: rgba(0, 0, 0, 0);
      box-shadow: none !important;
      outline: none;
      border: none;
      word-spacing: 0;
      letter-spacing: 0;
    }
    #conDiv {
      width: 1920px;
      height: 1080px;
      background-color: transparent;
      position: absolute;
      z-index: 1;
    }
    #conInput {
      width: 1920px;
      height: 1080px;
      position: absolute;
      z-index: -1;
    }
  </style>
</head>
<body>
  <script>
    var body = document.body;
    a = [];
    b = [];
    c = [];
    i = [];
    d = [];
    clicked = [];
    altDown = false;
    window.onload = function() {
      conInput = document.createElement('div');
      conInput.setAttribute('id', 'conInput');
      document.body.appendChild(conInput);
      conDiv = document.createElement('div');
      conDiv.setAttribute('id', 'conDiv');
      document.body.appendChild(conDiv);
      //for(u=0;u<1911;u+=10){
      for (u = 0; u < 1901; u += 20) {
        a.push(u);
        for (v = 0; v < 1061; v += 20) {
          //for(v=0; v<1071; v+=10){
          b.push(v);
          var newDiv = document.createElement("div");
          newDiv.id = b.length - 1;
          conDiv.appendChild(newDiv);
        }
      }
      //for(u=0;u<1911;u+=10){
      //	for(v=0; v<1071; v+=10){
      for (u = 0; u < 1901; u += 20) {
        for (v = 0; v < 1061; v += 20) {
          c.push(v);
          var newInput = document.createElement("input");
          newInput.setAttribute('type', 'color');
          newInput.id = c.length - 1;
          conInput.appendChild(newInput);
        }
      }
      function marking() {
        $("body").on("mousemove", "div", function(event) {              
          if (event.shiftKey) {
             this.style.backgroundColor =  "#b3ffb3";
          }
        })
      }
      function changeColor() {
        divs = body.getElementsByTagName('div');
        inputs = body.getElementsByTagName('input');
        for (var l = 0; l < inputs.length; l++) {
          if (inputs[l].id !== "conInput") {
            i.push(inputs[l]);
          }
        }
        for (var k = 0; k < divs.length; k++) {
          if (divs[k].id !== "conDiv" && divs[k].id !== "conInput") {
            d.push(divs[k]);
          }
        }
        $(document).ready(function() {
          $("body").bind("keydown", function(event) {
            if (event.altKey) {
              for (var h in d) {
                //if(d[h].id == "10272" && altDown == false){
                if (d[h].id == "2544" && altDown == false) {
                  d[h].style.opacity = "0.4";
                  altDown = true;
                }
                //else if(d[h].id == "10272" && altDown == true) {
                else if (d[h].id == "2544" && altDown == true) {
                  d[h].style.opacity = "1";
                  altDown = false;
                }
              }
            }
          });
        });
        $('div').on('click', function() {
          if (this.id != "conDiv" && this.id != "conInput") {
            if (event.ctrlKey) {
              clicked.push(this);
              for (var h in d) {
                if (d[h].id == this.id) {
                  $(d[h]).css('background-color', 'rgba(255, 255, 102, 0.8)');
                }
              }
            } else if (clicked.length > 0) {
              for (var clk in clicked) {
                target = document.getElementById(this.id);
                $(target).click();
                $(target).on('change', function() {
                  newColor = this.value;
                  parsed = newColor.charAt(0) == "#" ? newColor.substring(1, 7) : newColor;
                  r = parseInt(parsed.substring(0, 2), 16).toString();
                  g = parseInt(parsed.substring(2, 4), 16).toString();
                  b = parseInt(parsed.substring(4, 6), 16).toString();
                  newColorRGB = "(" + r + ", " + g + ", " + b + ")";
                  for (clk in clicked) {
                    clicked[clk].style.backgroundColor = newColor;
                    clicked[clk].setAttribute("title", newColorRGB);
                  }
                  clicked = [];
                });
              }
            } else if (clicked.length == 0) {
              for (var z in i) {
                if (i[z].id == this.id) {
                  target = document.getElementById(this.id);
                  $(target).click();
                  $(target).on('change', function() {
                    newColor = this.value;
                    parsed = newColor.charAt(0) == "#" ? newColor.substring(1, 7) : newColor;
                    r = parseInt(parsed.substring(0, 2), 16).toString();
                    g = parseInt(parsed.substring(2, 4), 16).toString();
                    b = parseInt(parsed.substring(4, 6), 16).toString();
                    newColorRGB = "(" + r + ", " + g + ", " + b + ")";
                    for (var h in d) {
                      if (d[h].id == this.id) {
                        d[h].style.backgroundColor = newColor;
                        d[h].setAttribute("title", newColorRGB);
                      }
                    }
                  });
                }
              }
            }
          }
        });
      }
      changeColor();
      marking();
    }
  </script>
</body>
</html>

您需要编写代码来撤消keyup中的着色。

您已经正确地编写了keydown,但该事件中没有任何内容表明当用户不再使用密钥时反转此代码。

keyup明确表示向下点击键,keydown明确表示释放键。