root 1 year ago
parent
commit
649ed43cd2
3 changed files with 92 additions and 53 deletions
  1. 39 39
      js/UForm/Event.js
  2. 23 14
      node/message.js
  3. 30 0
      touchevent.js

+ 39 - 39
js/UForm/Event.js

@@ -101,10 +101,10 @@ U.UF.EV.scrollLoad = function (obj, fun) {
 */
 U.UF.EV.scrollLoad.scrollTop = function (obj) {
     return Math.max(//取最大值
-    //chrome
-       U.selectEl(obj)[0].scrollTop,
-    //firefox/IE
-       document.documentElement.scrollTop
+        //chrome
+        U.selectEl(obj)[0].scrollTop,
+        //firefox/IE
+        document.documentElement.scrollTop
     );
 }
 
@@ -214,41 +214,41 @@ U.UF.EV.simulateMouseClicks = function (el, str) {
         if (_event) { //原本已经具有事件event来源的情况下处理
             //执行mouse事件处理
             _mousevent.initMouseEvent(
-                            str,
-                            true,
-                            true,
-                            window,
-                            _event.detail,
-                            _event.screenX,
-                            _event.screenY,
-                            _event.clientX,
-                            _event.clientY,
-                            _event.ctrlKey,
-                            _event.altKey,
-                            _event.shiftKey,
-                            _event.metaKey,
-                            _event.button,
-                            _event.relatedTarget
+                str,
+                true,
+                true,
+                window,
+                _event.detail,
+                _event.screenX,
+                _event.screenY,
+                _event.clientX,
+                _event.clientY,
+                _event.ctrlKey,
+                _event.altKey,
+                _event.shiftKey,
+                _event.metaKey,
+                _event.button,
+                _event.relatedTarget
             );
         }
         else {
             //没有事件来源event的处理
             _mousevent.initMouseEvent(
-                            str,
-                            true,
-                            true,
-                            document.defaultView,
-                            0,
-                            0,
-                            0,
-                            0,
-                            0,
-                            false,
-                            false,
-                            false,
-                            false,
-                            0,
-                            el
+                str,
+                true,
+                true,
+                document.defaultView,
+                0,
+                0,
+                0,
+                0,
+                0,
+                false,
+                false,
+                false,
+                false,
+                0,
+                el
             )
         }
         //分发事件
@@ -290,7 +290,7 @@ U.UF.EV.simulatePhoneTouch = function (el, str, obj) {
         }
         //chrome
         _arr = [
-        //chrome
+            //chrome
             [
                 event.touches, //当前屏幕上所有触摸点的列表
                 event.targetTouches, //当前对象上所有触摸点的列表
@@ -306,7 +306,7 @@ U.UF.EV.simulatePhoneTouch = function (el, str, obj) {
                 event.shiftKey,
                 event.metaKey
             ],
-        //safari
+            //safari
             [
                 str,
                 true,
@@ -327,7 +327,7 @@ U.UF.EV.simulatePhoneTouch = function (el, str, obj) {
                 event.scale,
                 event.rotation
             ],
-        //firefox
+            //firefox
             [
                 str,
                 true,
@@ -341,8 +341,8 @@ U.UF.EV.simulatePhoneTouch = function (el, str, obj) {
                 event.touches,
                 event.targetTouches,
                 event.changedTouches
-                ],
-            ];
+            ],
+        ];
         //由于浏览器对直接执行事件的兼容有三种方案,这里是对三种方案的循环添加
         for (i = 0; i < _arr.length; i++) {
             //直接执行

+ 23 - 14
node/message.js

@@ -609,7 +609,7 @@ us.deluser = function (userid, pageid) {
 * 用户下线,用计时器实时的监控用户是否在线
 */
 us.offLine = function () {
-    var i, j, istrue = true;
+    var i, j;
     var _user, _connect = us.connect;
     //循环目前所有的连接用户
     for (i in _connect) {
@@ -618,24 +618,33 @@ us.offLine = function () {
             //判断用户已下线
             if (_user[j].response.finished) {
                 //if (_user[j].response.connection == null || _user[j].response.connection.destroyed) {
-                console.log("================2===============");
-                console.log(i);
-                console.log(j);
-                us.deluser(i, j); //删除用户的数据
-                delete _user[j]
+                //等待五秒后,判断用户是否重连,重连的用户不为下线用户
+                us.offLineByUser(i, j, _user);
             }
         }
-        for (j in _user) { istrue = false; break }
-        //这个用户下所有的连接用户都不在了
-        if (istrue) {
-            //用户登录数据清理,用于已经下线
-            delete us.user[i];
-            delete us.connect[i];
-        }
-        istrue = true;
     }
 }
 
+/**
+* 用户下线
+*/
+us.offLineByUser = function (i, j, _user) {
+    setTimeout(() => {
+        if (_user[j].response.finished) {
+            var k, istrue = true;
+            us.deluser(i, j); //删除用户的数据
+            delete _user[j];
+            for (k in _user) { istrue = false; break }
+            //这个用户下所有的连接用户都不在了
+            if (istrue) {
+                //用户登录数据清理,用于已经下线
+                delete us.user[i];
+                delete us.connect[i];
+            }
+        }
+    }, 5000);
+}
+
 /**
 * 获取用户传参异步
 *

+ 30 - 0
touchevent.js

@@ -0,0 +1,30 @@
+
+
+function touchHandler(event) {
+    event.stopPropagation();
+    var touches = event.changedTouches,
+        first = touches[0],
+        type = "";
+    switch (event.type) {
+        case "touchstart": type = "mousedown"; break;
+        case "touchmove": type = "mousemove"; break;
+        case "touchend": type = "mouseup"; break;
+        default: return;
+    }
+    var simulatedEvent = new MouseEvent(type, { "altKey": false, "button": 0, "buttons": 0, "clientX": first.clientX, "clientY": first.clientY, "ctrlKey": false, "metaKey": false, "relatedTarget": first, "screenX": first.screenX, "screenY": first.screenY, "shiftKey": false });
+
+    // var simulatedEvent = document.createEvent("MouseEvent");
+    // simulatedEvent.initMouseEvent(type, true, true, window, 1,
+    //     first.screenX, first.screenY,
+    //     first.clientX, first.clientY, false,
+    //     false, false, false, 0/*left*/, null);
+
+    first.target.dispatchEvent(simulatedEvent);
+}
+
+function init() {
+    document.addEventListener("touchstart", touchHandler, true);
+    document.addEventListener("touchmove", touchHandler, true);
+    document.addEventListener("touchend", touchHandler, true);
+    document.addEventListener("touchcancel", touchHandler, true);
+}