鍍金池/ 問答/HTML/ js調用同一個方法兩次,只執(zhí)行第二個方法。

js調用同一個方法兩次,只執(zhí)行第二個方法。

在同一個js文件里,有兩個寫好的方法 a,b。當c方法調用時,可以運行,但是如果兩個方法c,d同時調用上述的ab方法只執(zhí)行第二個d方法。怎么辦,是把a,b做成封包還是放到其他js文件。

這兩個是操作方法

function a(first) { //移動目標方法
    first.onmousedown = function (e) {      //把onclick改成mouseover就是一獲得焦點圖片就跟隨鼠標移動,onmousedown鼠標拖動效果
        e.preventDefault && e.preventDefault(); //去掉圖片拖動響應  重要!!!
        var x = e.clientX - first.offsetLeft;
        var y = e.clientY - first.offsetTop;
        document.onmousemove = function (e) {
            first.style.left = e.clientX - x + "px";
            first.style.top = e.clientY - y + "px";
        };
        document.onmouseup = function () {
            document.onmousemove = null;
            document.onmouseup=null;
        }
    }
};

//Collision detection,碰撞檢測,first為第一個傳入參數,為移動的元素,second為第二個傳入的參數,為靜止的元素。method為方法,即碰撞后調用的方法;
function  b(first,second,method) {
    //碰撞檢測
    /*    var first=document.getElementById("#");//動
        var second=document.getElementById("#");//靜*/
    first.onmousemove=function () {  //在first移動時檢測碰撞
        var t1 = first.offsetTop,
            l1 = first.offsetLeft,
            r1 = first.offsetLeft + first.offsetWidth,
            b1 = first.offsetTop + first.offsetHeight;
        var t2 = second.offsetTop,
            l2 = second.offsetLeft,
            r2 = second.offsetLeft + second.offsetWidth,
            b2 = second.offsetTop + second.offsetHeight;
        var noConflict=b1<t2 || l1>r2 || t1>b2 || r1<l2;// 表示沒碰上
        if(!noConflict){  //返回值給調用的方法進行判斷;×
            // return true;
            method.f();  //調用在json數據里寫好的函數方法,形成動態(tài)加載;
            // method();  //換一種思路,里面的操作調用其他方法,形成嵌套;
        }
    }
}

兩個調用

function c() {
    var method={   //測試采用json方法傳遞定義好的函數
        name:"method",
        f:function () { //方法定義區(qū)間,請寫入first與second碰撞發(fā)生的效果;
          //語句
    }
    move(first);
    CD(first,second,method);
}

function d(){
    var method={
        name:"method",
        f:function () {
               //語句
    }
        }
       move(first);
       CD(first,second,method);

}
cd之間的first,second,method都是不一樣的。
回答
編輯回答
心上人

根據邊城大神的回答,進行調整,增加了if判斷來為事件執(zhí)行的順序排序。

2018年2月2日 09:09
編輯回答
蝶戀花

通過賦值的方式對同一個對象綁定事件,后綁定的事件會替換掉前一個。如果你需要兩個都保留,可以使用 addEventListener

2018年5月15日 15:15