2016-04-01 308 views
1

您必须先点击第一个按钮才能使按下按钮获得注册。Javascript - 按下按键后保持按下状态(返回true)

<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){ 
 

 
     // \t 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() \t \t  \t \t 
 
       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>

如果我按Shift键,它的工作原理和div的得到他们的颜色,但如果我释放Shift键,状态保持真正,是它让着色刷新之前。

下面是代码:

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{}; 
     } 
    }) 
}); 

}

我可以以某种方式告诉PROGRAMM对Shift键,释放反应?

UPDATE

$("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"; 
        } 
       } 
      }) 
     } 
}) 

现在它改变了上Shift键,的颜色和变化对KEYUP颜色为#000000。但它仍然保持在keydown,如果我将鼠标悬停在div上,它将对象压入我的数组而不着色。

我希望它在按Shift的时候变色,并且在释放Shift时什么也不做。

我错过了什么?

+0

我觉得你的代码是在这个片段 – tforgione

+0

你应该张贴的HTML语法错误并创建一个我们可以运行代码的代码片段。 https://开头博客。stackoverflow.com/2014/09/introducing-runnable-javascript-css-and-html-code-snippets/ –

+0

@Juan Mendes代码在那里 – AccNeeder

回答

1

你似乎需要的是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){ 
 

 
     // \t 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>

+0

好的,这工作相当不错。谢谢。是否有可能取消设置悬停的处理程序?还是最好不尝试? – AccNeeder

+0

您需要分别设置mousein和mouseout事件处理程序,以便您可以调用'off',我不认为需要它,但是如果您确实需要这些,那么您需要这样做。 –

0

您需要编写代码以撤销keyup中的着色。

您已经正确编写了​​,但该事件中并没有内置任何内容,表示在用户不再使用该密钥时,会反转此代码。

keyup明确用于向下点击某个键,并且​​明确用于释放键。

相关问题