EventUtil不能直接调用

本文介绍HTML5中用于检测网络状态变化的online和offline事件,并提供了一段示例代码,展示了如何自定义EventUtil工具来处理这些事件,同时介绍了如何使用navigator.onLine属性检查设备的在线状态。

在学习离线检测的使用,书上说HTML5定了俩个事件:online和offline。
当网络从离线变成在线或者从在线变成离线时,分别触发这俩个事件。
代码如下:

    EventUtil.addHandler(window,"online",function () {
        alert("离线转化成在线!");
    });
    EventUtil.addHandler(window,"offline",function () {
        alert("在线转化成离线!");
    })

但是运行时,浏览器会报错,EventUtil is no defined
在这里插入图片描述

查阅资料才发现,原来EventUtil是需要自己封装的!!!!
代码如下:

  var EventUtil={

        addHandler:function(element,type,handler){ //添加事件
            if(element.addEventListener){
                element.addEventListener(type,handler,false);  //使用DOM2级方法添加事件
            }else if(element.attachEvent){                    //使用IE方法添加事件
                element.attachEvent("on"+type,handler);
            }else{
                element["on"+type]=handler;          //使用DOM0级方法添加事件
            }
        },

        removeHandler:function(element,type,handler){  //取消事件
            if(element.removeEventListener){
                element.removeEventListener(type,handler,false);
            }else if(element.detachEvent){
                element.detachEvent("on"+type,handler);
            }else{
                element["on"+type]=null;
            }
        },

        getEvent:function(event){  //使用这个方法跨浏览器取得event对象
            return event?event:window.event;
        },

        getTarget:function(event){  //返回事件的实际目标
            return event.target||event.srcElement;
        },

        preventDefault:function(event){   //阻止事件的默认行为
            if(event.preventDefault){
                event.preventDefault();
            }else{
                event.returnValue=false;
            }
        },

        stopPropagation:function(event){  //立即停止事件在DOM中的传播
            //避免触发注册在document.body上面的事件处理程序
            if(event.stopPropagation){
                event.stopPropagation();
            }else{
                event.cancelBubble=true;
            }
        },

        getRelatedTarget:function(event){  //获取mouseover和mouseout相关元素
            if(event.relatedTarget){
                return event.relatedTarget;
            }else if(event.toElement){      //兼容IE8-
                return event.toElement;
            }else if(event.formElement){
                return event.formElement;
            }else{
                return null;
            }
        },

        getButton:function(event){    //获取mousedown或mouseup按下或释放的按钮是鼠标中的哪一个
            if(document.implementation.hasFeature("MouseEvents","2.0")){
                return event.button;
            }else{
                switch(event.button){   //将IE模型下的button属性映射为DOM模型下的button属性
                    case 0:
                    case 1:
                    case 3:
                    case 5:
                    case 7:
                        return 0;  //按下的是鼠标主按钮(一般是左键)
                    case 2:
                    case 6:
                        return 2;  //按下的是中间的鼠标按钮
                    case 4:
                        return 1;  //鼠标次按钮(一般是右键)
                }
            }
        },

        getWheelDelta:function(event){ //获取表示鼠标滚轮滚动方向的数值
            if(event.wheelDelta){
                return event.wheelDelta;
            }else{
                return -event.detail*40;
            }
        },

        getCharCode:function(event){   //以跨浏览器取得相同的字符编码,需在keypress事件中使用
            if(typeof event.charCode=="number"){
                return event.charCode;
            }else{
                return event.keyCode;
            }
        }

    };

定义了EventUtil后就可以使用了!!!

顺便一提:navigator.onLine可以检查设备是否在线或者离线哦,true表示在线,false表示离线

分段解释一下这段方法在干什么? public void updateEventType(String regionCode, String accountId, String deviceId, String deviceType, String uuid, Collection<String> eventTypes, String orderServiceType, Collection<UpdateEventTypeReq.EventTypeInfo> eventTypeInfos) { if (StringUtils.isEmpty(orderServiceType)) { log.warn("OrderServiceType is null"); } ManuallyUpdateEventTypeResponse response = indexServerApi.manuallyUpdateEventType(accountId, deviceId, uuid, eventTypes, orderServiceType, eventTypeInfos); if (response.getUpdated()) { long previousEventType = response.getPreviousEventType(); long currentEventType = response.getCurrentEventType(); long detectionSource = response.getDetectionSource(); List<UpdateEventTypeChannelResult> multiChannelResults = response.getEventTypeUpdateChannelResultsList().stream() .map(info -> modelMapper.map(info, UpdateEventTypeChannelResult.class)).collect(Collectors.toList()); statService.recordUpdateEventType(UpdateEventTypeStat.builder() .accountId(accountId).deviceId(deviceId).deviceType(deviceType).uuid(uuid) .previousEventType(previousEventType).currentEventType(currentEventType) .detectionSource(detectionSource) .agentHubDeviceId(response.getAgentHubDeviceId()) .orderServiceType(orderServiceType) .updateEventTypeChannelResults(multiChannelResults) .build()); String agentHubDeviceId = response.getAgentHubDeviceId(); if (StringUtils.isEmpty(agentHubDeviceId)) { deviceServiceV2.reportUpdatedEventType(regionCode, accountId, deviceId, deviceType, uuid, previousEventType, currentEventType, detectionSource, null, multiChannelResults); return; } boolean isHubDetect = EventUtil.isHubDetect(previousEventType, currentEventType, detectionSource); boolean idCameraDetect = EventUtil.isCameraDetect(previousEventType, currentEventType, detectionSource); if (isHubDetect) { deviceServiceV2.reportUpdatedEventType(regionCode, accountId, agentHubDeviceId, deviceType, uuid, previousEventType, currentEventType, detectionSource, deviceId, multiChannelResults); } if (idCameraDetect) { deviceServiceV2.reportUpdatedEventType(regionCode, accountId, deviceId, deviceType, uuid, previousEventType, currentEventType, detectionSource, null, multiChannelResults); } } }
最新发布
09-25
6月 11, 2025 9:38:18 上午 com.alibaba.druid.pool.DruidDataSource info 信息: {dataSource-1} inited Exception in thread "JavaFX Application Thread" java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1787) at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1670) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Node.fireEvent(Node.java:8879) at javafx.scene.control.Button.fire(Button.java:200) at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:206) at com.sun.javafx.scene.control.inputmap.InputMap.handle(InputMap.java:274) at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:198) at javafx.scene.Scene$MouseHandler.process(Scene.java:3851) at javafx.scene.Scene$MouseHandler.access$1200(Scene.java:3579) at javafx.scene.Scene.processMouseEvent(Scene.java:1849) at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2588) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:397) at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$2(GlassViewEventHandler.java:434) at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:390) at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:433) at com.sun.glass.ui.View.handleMouseEvent(View.java:556) at com.sun.glass.ui.View.notifyMouse(View.java:942) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174) at java.base/java.lang.Thread.run(Thread.java:1583) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at com.sun.javafx.reflect.Trampoline.invoke(MethodUtil.java:76) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at com.sun.javafx.reflect.MethodUtil.invoke(MethodUtil.java:273) at com.sun.javafx.fxml.MethodHelper.invoke(MethodHelper.java:83) at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1782) ... 47 more Caused by: java.lang.IllegalStateException: Location is not set. at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2459) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435) at com.itheima.utils.PaneUtils.showAndInitPane(PaneUtils.java:39) at com.itheima.controller.RegisterController.toLoginPage(RegisterController.java:45) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ... 54 more
06-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值