0

我这里有一个真正的问题。我希望仅在单击对象以及将鼠标移到对象上时才调用函数。这是一个(语法延迟)示例,可以让您理解:

<div onMouseMove+onMouseDown="function()" ... ></div>

我在想一种方法来解决这个问题。如果我做一个onMouseDown触发一个函数来改变我的onMouseMove- 函数的名称,并使用“填充”或“替代”函数怎么办?让我解释:

<div id="object" onMouseMove="substituteFiller()" onMouseDown="nameChanger()" ... ></div>
<script>
    function nameChanger(){
        document.getElementById("object").onMouseMove = "theRealFunction()"; 
    }
</script>
<script>
    function theRealFunction() ... 

当我将鼠标移到对象上时,什么都不会发生,因为该功能substituteFiller()不起作用。但是,当鼠标单击对象时,onMouseMove- 函数将是正确的,theRealFunction()现在theRealFunction()将在鼠标移动时调用。

这样,我theRealFunction()只能在单击对象和移动鼠标时激活/调用。但是,它不起作用。

要清楚:如何更改正在调用的函数的名称?如何仅在单击对象并移动鼠标时才调用函数?

最好的问候,希望你能理解!如果没有,请评论我猜!

4

2 回答 2

3

好的,您需要做的就是分别注册 3 个事件处理程序:

  1. 鼠标按下
  2. 鼠标向上
  3. 鼠标移动

您将在鼠标向下向上分别切换为 true 和 false 的布尔标志。然后,在鼠标移动处理程序上,您需要检查标志是否为真,这意味着鼠标按钮已按下。最后,我们检查光标是否真的从它的初始位置移动了。

这是JSFiddle

var example = document.getElementById("example");
var position = {
  X: 0,
  Y: 0
};

example.onmousedown = function (down) {
  downFlag = true;
  // Record click position
  position.X = down.clientX;
  position.Y = down.clientY;
};

example.onmouseup = function (up) {
  downFlag = false;
};

example.onmousemove = function (move) {
  if (downFlag) {
    if (position.X !== move.clientX || position.Y !== move.clientY) {
      // Do stuff here
    }
  }
};
于 2015-08-09T17:17:48.520 回答
1

它是我网页之一的一部分..检查出来。也许这会对你有所帮助..

<div id="Log_frm">
<fieldset id="fld_1">
    <!--<legend>Log In</legend>-->        
    <div id="log_l" onmouseover="dv_in();" onmouseout="dv_out();" style="background-color:#0C93D4;font-size: 15px;height: 30px;padding: 7px 32px 0px 32px;font-weight:bold; float: left;-webkit-border-top-left-radius: 5px;">
        <a  href="#" onclick="">Log In</a>
    </div>
    <div id="log_r" onmouseover="dv_out();" onmouseout="dv_in();"style="background-color: #0C93D4;font-size: 15px;font-weight:bold; float: right;height: 30px;padding: 7px 14px 0px 12px;-webkit-border-top-right-radius: 5px;">
        <a  href="#">Need Any Help</a>
    </div >   
    </fieldset>
</div>

<style>
#Log_frm {
    width: 250px;
    height: 60px;
    margin-top: 10px;
    position: absolute;
    font-size: 12px;
    float: right;
    right: 0px;
}

#Log_frm a {
    color: #fff;
    text-decoration: underline !important;
    left: auto;
    margin-right: auto;

}

<script type="text/javascript">
        function dv_in() {  
            log_l.style.backgroundColor="#06C"; 
            log_r.style.backgroundColor="#0C93D4"; 
        }
        function dv_out() {  
            log_l.style.backgroundColor="#0C93D4"; 
            log_r.style.backgroundColor="#06C";
        }


</script>

注册..

于 2015-08-09T17:14:28.847 回答