精华内容
下载资源
问答
  • 该事件会连续地大量触发,所以它的监听函数之中不应该有非常耗费计算的操作。 解决方案 推荐的做法是使用requestAnimationFrame或setTimeout控制该事件的触发频率,然后可以结合customEvent抛出一个...

    问题

    scroll事件在文档或文档元素滚动时触发,主要出现在用户拖动滚动条。

    window.addEventListener('scroll', callback);
    

    该事件会连续地大量触发,所以它的监听函数之中不应该有非常耗费计算的操作。


    解决方案

    推荐的做法是使用requestAnimationFramesetTimeout控制该事件的触发频率,然后可以结合customEvent抛出一个新事件。

    requestAnimationFrame()

      var throttle = function (type, name, obj) {
        var obj = obj || window;
        var running = false;
        var func = function () {
          if (running) { return; }
          running = true;
          requestAnimationFrame(function() {
            obj.dispatchEvent(new CustomEvent(name));
            running = false;
          });
        };
        obj.addEventListener(type, func);
      };
    
      // 将 scroll 事件重定义为 optimizedScroll 事件
      throttle('scroll', 'optimizedScroll');
    })();
    
    window.addEventListener('optimizedScroll', function() {
      console.log('Resource conscious scroll callback!');
    });
    

    上面代码中,throttle函数用于控制事件触发频率,requestAnimationFrame方法保证每次页面重绘(每秒60次),只会触发一次scroll事件的监听函数。也就是说,上面方法将scroll事件的触发频率,限制在每秒60次。具体来说,就是scroll事件只要频率低于每秒60次,就会触发optimizedScroll事件,从而执行optimizedScroll事件的监听函数。


    setTimeout()

    setTimeout方法,可以放置更大的时间间隔。

    (function() {
      window.addEventListener('scroll', scrollThrottler, false);
    
      var scrollTimeout;
      function scrollThrottler() {
        if (!scrollTimeout) {
          scrollTimeout = setTimeout(function () {
            scrollTimeout = null;
            actualScrollHandler();
          }, 66);
        }
      }
    
      function actualScrollHandler() {
        // ...
      }
    }());
    

    上面代码中,每次scroll事件都会执行scrollThrottler函数。该函数里面有一个定时器setTimeout,每66毫秒触发一次(每秒15次)真正执行的任务actualScrollHandler


    throttle

    function throttle(fn, wait) {
      var time = Date.now();
      return function() {
        if ((time + wait - Date.now()) < 0) {
          fn();
          time = Date.now();
        }
      }
    }
    
    window.addEventListener('scroll', throttle(callback, 1000));
    

    上面的代码将scroll事件的触发频率,限制在一秒一次。

    lodash函数库提供了现成的throttle函数,可以直接使用。

    window.addEventListener('scroll', _.throttle(callback, 1000));
    

    知识拓展
    debouncethrottle的却别

    throttle是“节流”,确保一段时间内只执行一次,而debounce是“防抖”,要连续操作结束后再执行。以网页滚动为例,debounce要等到用户停止滚动后才执行,throttle则是如果用户一直在滚动网页,那么在滚动过程中还是会执行。

    展开全文
  • - (void)dealloc { @try { [self.view removeObserver:self forKeyPath:@"frame"]; } ...我并没有在当前类里添加self.view的属性frame的KVO监听,直接移除的,这么写就不会导致崩溃

     

    
    - (void)dealloc {
        
        @try {
            
            [self.view removeObserver:self forKeyPath:@"frame"];
        }
        @catch(NSException *exception) {
            NSLog(@"--%@", exception);
        }
    }

    注意:

    我并没有在当前类里添加self.view的属性frame的KVO监听,直接移除的,这么写就不会导致崩溃

    展开全文
  • 监听日志过大处理指南

    万次阅读 2017-12-13 15:39:43
    随着Oracle数据库的运行,监听日志如果不处理会越来越大,当日志过大会影响监听进程的稳定,特别是windows平台,当日志大小达到4G,可能出现连接不正常。因此,建议定期对日志进行转储,由于监听进程会持有监听日志...
    

    随着Oracle数据库的运行,监听日志如果不处理会越来越大,当日志过大会影响监听进程的稳定,特别是windows平台,当日志大小达到4G,可能出现连接不正常。因此,建议定期对日志进行转储,由于监听进程会持有监听日志文件的句柄,因此,不建议直接清空或删除,需要采用临时关闭监听日志记录功能,然后转储,然后再打开的方式进行处理。以下将分别就windows和类Unix平台进行介绍。

    1        Windows环境

    1. 确认监听名称

    打开计算机管理->服务,然后找到监听对应的服务,示例如下:


    这里为了示例,特意建立了两个监听,服务名分别为:OracleOraDb11g_home1TNSListenerOracleOraDb11g_home1TNSListenerLISTENER1。默认的监听名称是LISTENER,当使用默认监听时,服务名在TNSListener后面为空,如果非默认监听名称,那么服务名后面会添加监听名称。这里就可以看到包含两个监听:LISTENERLISTENER1.除此之外,也可以通过%ORACLE_HOME%\network\admin\listener.ora文件确认监听名称。示例如下:



    2.确认监听日志位置


    确认了监听的名称,接下来就是确认监听日志的位置。通过安装ORACLE软件的用户在cmd中执行lsnrctl status 监听名称来获取位置



    Oracle监听日志有两种格式,一种是xml格式,一种是文本文件格式。xml格式的日志是10M一个,所以不存在单个文件过大的问题。因此我们需要关注的是文本文件格式的监听日志文件。监听状态输出中显示的是xml格式的文件位置,文本文件格式的日志文件所在的目录位于xml格式日志所在位置上层目录下的trace目录下,比如这里xml文件位于:C:\app\Administrator\diag\tnslsnr\WIN2008\listener\alert目录下,那么文本文件格式的日志就位于C:\app\Administrator\diag\tnslsnr\WIN2008\listener\trace下。我们这里对应的文件是:C:\app\Administrator\diag\tnslsnr\WIN2008\listener\trace\listener.log.如果该目录存在多个文件,只需要通过更新时间基本上就可以确定当前在使用的文件。

    3.停止监听日志记录功能


    停止记录监听日志,需要通过lsnrctl来进行设置,命令如下:


    lsnrctl

    set current_listener监听名称

    set log_status off

    exit


    以下是示例截图:



    4.转储文件


    转储文件可以切换到监听日志文件位置,直接重命名(如果确认不需要保留历史日志记录,可以删除)。



    5.重新打开监听日志记录功能


    重新打开日志记录功能,文件会自动生成。


    lsnrctl

    set current_listener监听名称

    set log_status on

    exit


    以下是示例截图:



    6.确认监听日志记录功能正常


    确认文件已生成。




    2  Unix环境


    1. 确认监听名称


    Unix环境包括AIXHP-UnixLinux等,该文档描述操作原则上适用这些平台。


    确认监听名称,可以通过进程进行确认,命令如下:


    ps -ef|grep lsnr|grep -v grep


    示例如下:




    这里可以看到该系统已grid用户启动了两个监听,名称分别是:LISTENERLISTENER_SCAN1.

    2.确认监听日志位置


    确认了监听的名称,接下来就是切换到启动监听的用户,确认监听日志的位置。通过启动监听的用户执行lsnrctlstatus监听名称来获取位置


    su - grid

    lsnrctl status LISTENER


    示例截图如下:


    Oracle监听日志有两种格式,一种是xml格式,一种是文本文件格式。xml格式的日志是10M一个,所以不存在单个文件过大的问题。因此我们需要关注的是文本文件格式的监听日志文件。监听状态输出中显示的是xml格式的文件位置,文本文件格式的日志文件所在的目录位于xml格式日志所在位置上层目录下的trace目录下,比如这里xml文件位于:/u01/app/grid_base/diag/tnslsnr/rac1/listener/alert目录下,那么文本文件格式的日志就位于/u01/app/grid_base/diag/tnslsnr/rac1/listener/trace下。我们这里对应的文件是:C:\app\Administrator\diag\tnslsnr\WIN2008\listener\trace\listener.log.如果该目录存在多个文件,只需要通过更新时间基本上就可以确定当前在使用的文件。

     

    3.停止监听日志记录功能


    停止记录监听日志,需要通过lsnrctl来进行设置,命令如下:


    lsnrctl

    set current_listener监听名称

    set log_status off

    exit


    以下是示例截图:



    4.转储文件


    转储文件可以切换到监听日志文件位置,直接重命名(如果确认不需要保留历史日志记录,可以删除)。



    5.重新打开监听日志记录功能


    重新打开日志记录功能,文件会自动生成。


    lsnrctl

    set current_listener监听名称

    set log_status on

    exit


    以下是示例截图:



    6.确认监听日志记录功能正常


    确认文件已生成。

    展开全文
  • 接口与监听机制

    2017-07-22 15:48:57
    addMouseListener(MouseListener l):鼠标监听方法,用来捕获鼠标点击,鼠标按下,鼠标释放,鼠标进入事件源对象,鼠标退出事件源对象五类动作 MouseMotionListener:用来处理鼠标移动和拖动动作的接口,实现...

    1.接口的组成

    接口是由常量和抽象方法组成的

    2.接口的定义格式

    接口定义的关键字:interface

    public interface 接口名 extends 接口,...{

    //定义常量,常量命名时最好每个字母都大写

    [public static final] 数据类型 常量名=常量值;

    //定义抽象方法,抽象方法没有方法体

    [public abstract] 返回值类型 抽象方法名(数据类型 参数名,...);

    }

    接口中所有的方法都是抽象方法,不能实例化对象,必须由一个类实现

    3.接口的实现

    //定义一个接口

    public interface Person{
    //定义一个抽象方法
         public void eat();
    }
    //定义一个类实现接口
    
    public class Student implements Person{

    public static void main(){

    private String name;//定义类的私有属性

    //实现接口中的抽象方法

    public void eat(){

    System.out.println(this.name+"正在吃东西");

    }

    Student s=new Student();

    s.name="张三";

    s.eat();

    }

    }

    程序运行的结果是:张三正在吃东西

    接口实现的关键词:implements

    接口实现的格式:

    public class 类名 extends 父类名 implements 接口名,...{

    //实现接口中的抽象方法

    }

    接口的作用:

    1)定义通用的规则

    2)丰富类的继承

    接口与类的区别

    1)接口可以由接口或者类继承,而类只能由类继承;

    2)一个类可以实现多个接口,但只能继承一个类;

    3)接口中的方法必须都是抽象方法,而类中的方法都是具体的方法;

    4)接口中的访问修饰符只有public,类中的访问修饰符可以是public,private,默认,protected等;

    5)接口不能实例化对象,类可以实例化对象;

    6)类中可以定义属性,接口中只能定义常量;

    7)接口中没有构造方法,类中至少有一个构造方法

    3.final关键字(终结器)

    1)被final定义的类不能被子类继承;

    2)被fina定义的方法不能被子类重写;

    3)被final定义的变量即成为常量,不能改变值;

    4.监听机制

    1)事件源对象:所有的容器组件和元素组件都可以成为事件源对象,动作发生在哪个组件上,哪个组件就成为事件源对象

    2)监听方法:捕获事件源对象上的动作,根据事件源对象相关信息和动作自动调用对应的事件接口中的事件处理方法,执行相应代码

    3)事件接口:不能实例化对象,需要定义一个类去实现它重写所有的抽象方法

    ActionListener:动作事件接口,处理鼠标点击和键盘回车动作,不能实例化对象需要定义一个类去实现它

    addActionListener(ActionListener l):动作监听方法,用来捕获文本输入框的回车动作和按钮上的鼠标

    MouseListener:鼠标事件接口,用来处理鼠标点击,鼠标按下,鼠标释放,鼠标进入事件源对象,鼠标退出事件源对象五类动作

    addMouseListener(MouseListener l):鼠标监听方法,用来捕获鼠标点击,鼠标按下,鼠标释放,鼠标进入事件源对象,鼠标退出事件源对象五类动作

    MouseMotionListener:用来处理鼠标移动和拖动动作的接口,实现以后的两类抽象方法会自动循环调用

    addMouseMotionListener(MouseMotionListener l):用来捕获鼠标移动和拖动动作

    展开全文
  • 如何保护信息安全 防止局域网监听.docx
  • 详解React Native监听Android回退按键与程序化退出应用 前言 我们知道Android回退按键,会控制页面返回, 并且退出应用并非真正意义退出,仍在后台运行,所以在某些场景下需要监控android回退按键,那么在React ...
  • 该实例程序使用Qt进行,windows的键盘后台监听,即使Qt桌面程序失去焦点在后台运行,也会捕捉到按键事件 这个程序使用windows的钩子(hook)实现的,Qt官方没有相关的实现 关于编译,我用的是Qt5.9.7 MinGW32位,我...
  • NULL 博文链接:https://smallbee.iteye.com/blog/2229647
  • Java监听器实现防止重复登录案例

    千次阅读 2019-03-17 14:20:40
    监听器的功能 防止重复登录:当一个用户登录系统之后,另外一个用户使用相同账户登陆时,对前一个用户进行踢除操作,保证在同一时间只有一个账户在登录系统。 案例说明: 通过过滤器实现登录控制,未登录用户不能...
  • 局域网监听的原理、实现与防范

    千次阅读 2012-08-21 20:27:32
    由于局域网中采用广播方式,因此,在某个广播域中可以监听到所有的信息包。而黑客通过对信息包进行分析,就能获取局域网上传输的一些重要信息。事实上,很多黑客入侵时都把局域网扫描和监听作为其最基本的步骤和手段...
  • 这三个事件只在手机上生效 touchstart:手指开始触屏 touchmove:手指移动 touchend:手指触屏结束 这个事件在手机上跟在pc端都生效 scroll事件 addeventlistener(name,callback,optional,...passive:true可以防止
  • 分布式系统中Redis的Key过期监听事件如何防止重复处理我在Java的分布式系统中,使用了Redis的Key过期时间Redis中设置如下:notify-keyspace-events Ex在Java中代码使用了JedisPubSub进行订阅:/** 添加Redisd的key...
  • 实现思想: 1.要想实现防止用户重复登录,我们自然而然就联想到使用单例模式让实体类只产生一个对象,一个对象中不能...2.然后就要通过监听器来监听session的信息,因为是防止用户重复登陆,所以我们使用attribute...
  • 监听防止重复登录

    千次阅读 2019-09-03 23:17:39
    监听防止重复登录,强迫前一个登录的下线登录首页(index.jsp)登录处理页面(login.jsp)主页面main.jsp用户登录权限过滤器(SessionFilter.java)防止用户重复登录的监听器(LoginSessionListener.java)登录...
  • TCP监听端口选择

    千次阅读 2020-06-09 23:32:47
    如果减一之后offset不为偶数值,表明第二次遍历已经完成,不再遍历,防止进入死循环。 offset--; if (!(offset & 1)) goto other_parity_scan; 最后,如果端口范围进行了拆分,跳转回标签other_half_scan,遍历后半...
  • 可以有效防止出现遗漏移除的监听. 还有BC.addOnceEvent(...);方法是也是懒人必不可少的方法。 BC类在actionscript中已经用了将近8年了,版本陆陆续续改过5次,这几天根据ts的特性修改了一个版本,值得推荐给大家。 ...
  • 监听滚动事件的时候可以在当前页面设置一个状态值的变量列如: scrollStatus // ( 0加载中,1可以触发事件,2加载完毕); 把scrollStatus作为一个开关只有状态值等于 1 的时候才可以触发事件...
  • vue计算属性和监听器区别

    千次阅读 2020-09-08 14:32:15
    计算属性可以防止监听属性的滥用,但一些异步请求,计算属性做不到,还得watch来完成。 例如:解决element-ui分页中删除页面最后一条数据时,currentPage没有减一,页面列表为空问题时,就可以用到监听属性 监听...
  • deep: true // 深度监听 <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type="text" v-model="firstName"></p> </div> new Vue({ el: '#root', ...
  • iOS 防止录屏和截屏的监听

    万次阅读 2018-09-04 10:47:28
    iOS实现不了不让截屏或者录屏,但是提供的截屏或者录屏的监听方法,我们也可以通过监听方法来拿到截屏的图片,为此参考了支付宝和微信支付时,截屏的处理方式。  通过上图发现,其实图片都已经保存到本地相册...
  • 监听微信返回

    千次阅读 2021-01-17 13:09:27
    在做微信公众号页面开发里,触发微信返回事件的时候有2个需求。我现在大概的页面流程是页面a->...所以我需要监听2个事件。1是监听a页面的返回事件,2是判断页面a...监听页面a是不是从上个页面返回来的可以使用 wi...
  • Python 键盘鼠标监听

    2020-12-07 13:10:51
    使用了全局变量result: 这里就是为了防止在向文件中写入数据的时候覆盖之前的文件信息 。 在判断键盘按下Q键的时候,停止键盘事件的记录。如果想彻底的停止程序的监听的话,需要调用win32api.PostQuitMessage(). ...
  • 详细讲解安卓截屏监听操作

    千次阅读 2018-05-07 18:18:50
    项目中有时会遇到监听用户截屏操作的需求,应用场景也比较丰富。 eg. 1: 某个隐私页面禁止截屏,当发现用户截屏后,删除该截屏文件; eg. 2: 当用户截屏时,可能是需要进行分享,意见反馈等操作,此时进行弹窗提示,...
  • 如何用机器人监听老板微信?

    万次阅读 多人点赞 2019-04-27 09:08:51
    随着微信社交的兴起,我们加入的群也越来越多,一个不经意就被拉入好几个群,群是大家协同交流的平台,但是微信群却越来越...为了解决这个痛点,猪哥今天带大家一起来看看如何用python开发一个可以监听老板群聊的...
  • 为了实现页面的宽度和高度自适应,有时候我们需要根据窗口的变化去改变页内元素的宽高,而 VUE 作为一款轻量级的 MVVM 框架,在监听和处理 BOM 事件时需要在指定的区域进行处理,这里记录两种常用而且比较简单的方法...
  • 先放开防火墙的端口,再来改监听端口。只有一个实例:net stop OracleOraDb11g_home1TNSListener再运行 NET Manager 修改实例名与Listener的端口号 (NETWORK\LISTENER.ORA)保存后,...
  • Swift中按钮监听方法私有化之后崩溃解决方式
  • Java监听

    2020-12-09 20:26:20
    用于监听ServletContext,HttpSession,ServletRequest等域对象的创建,销毁及其属性修改发生变化的事件 在时间发生前后进行一些必要的操作 实现步骤 编写java类实现监听器的接口,并且实现其接口方法 在web.xml...
  • 解决 js addEventListener重复监听

    千次阅读 2019-12-05 14:45:17
    问题:在使用addEventListener时会遇到监听的方法执行多次,是因为addEventListener重复添加事件监听时,不能替换之前的监听,导致有多个监听同时存在 解决: 关键点,创建一个公共的全局变量用于控制重复事件的...
  • 【Springboot深入解析】监听

    千次阅读 2020-03-29 18:21:53
    文章目录监听器一、监听器模式介绍二、系统监听器介绍三:监听事件触发机制四:自定义监听监听器 一、监听器模式介绍 监听器模式可以用下图来体现: 当运行到关键节点的时候,系统会通过广播器发布相应的事件,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 164,108
精华内容 65,643
关键字:

怎么防止监听