fn

js-scroll判断页面是向上滚动还是向下滚动

徘徊边缘 提交于 2020-01-20 15:40:46
原理:那当前的scrollTop和之前的scrollTop对比 如果变大了,表示向下滚动(scrollTop值变大); 如果变小了,表示向上滚动(scrollTop值变小)。 方法一:js代码: $(document).ready(function(){ var p=0, t=0; $(window).scroll(function(){ p=$(this).scrollTop(); if(t<p){ //下滚 }else{ //上滚 } setTimeout(function(){ t = p ; },0) }) }) 方法二: 1.单纯判断滚动条方向: function scroll(fn){ var beforeScrollTop = document.body.scrollTop, fn = fn || function(){}; window.addEventListener("scroll",function(){ var afterScrollTop = document.body.scrollTop; delta = afterScrollTop - beterScrollTop; if(delta===0){ return false; } fn(delte>0?"dowm":"up"); beforeScrollTop = afterScrollTop; }

#83 filter map

最后都变了- 提交于 2020-01-20 01:06:22
Map.prototype.filterKeys = function(fn) { return new Map([...this].filter(([k, v]) => { return fn(k); })); } Map.prototype.filterValues = function(fn) { return new Map([...this].filter(([k, v]) => { return fn(v); })); } 请你给原生的 Map 添加方法 filterKeys 和 filterValues ,可以类似于于数组方法的 filter 。它们分别可以对 Map 的键和值进行筛选,它们会返回一个新的 Map, 是对原有的 Map 的筛选结果,例如: const m = new Map([['Jerry', 12], ['Jimmy', 13], ['Tomy', 14]]) m.filterKeys((key) => key.startsWith('J')) // => Map { Jerry => 12, Jimmy => 13 } m.filterValues((val) => val >= 13) // => Map { Jimmy => 13, Tomy => 14 } // 原有的 map 保持不变 console.log(m) // => Map {

promise核心技术

橙三吉。 提交于 2020-01-19 02:01:18
一个程序员要在看到代码的语法同时判断数据类型 知道语法是基础 基础才能延伸功能 //一行代码 a()[0]() // a() 首先推断出a是一个函数 //a()[0] 判断a函数的返回值是一个数组 // a()[0]() 数组的第一项是一个函数 语法 .的左边必然是对象 括号的左边就是函数 函数对象与实例对象 实例对象: new产生的对象称实例对象(简称对象) 函数对象: 将函数作为对象使用的时候,称为函数对象 const Fn = function() {} //这个时候只是 Fn函数 不是构造函数 不是函数对象 const fn = new Fn() //Fn成了构造函数 fn是实例对象(对象) Fn.prototype //Fn成了函数对象 角色不在是一个函数,但是它本身是函数 所以称为函数对象 操作函数的属性和方法的时候 ,就扮演函数对象。 实例对象和函数对象有很多区别 比如 函数对象有 bind方法 实例对象没有 来源: https://www.cnblogs.com/-constructor/p/12210868.html

double buffer 实现

眉间皱痕 提交于 2020-01-19 01:59:04
1. 背景 字典或者模型加载经常会用到双buffer这样读多写少的数据结构。这里介绍一个从百度的brpc拿出来的一个双buffer实现。 2. 痛点 经常会遇到的是一个读远多于写的数据结构:大部分时候,所有线程从一个不变的server列表中选取一台server。如果server列表真是“不变的”,那么选取server的过程就不用加锁,我们可以写更复杂的分流算法。一个方法是用读写锁,但当读临界区不是特别大时(毫秒级),读写锁并不比mutex快,而实用的分流算法不可能到毫秒级,否则开销也太大了。另一个方法是双缓冲,很多检索端用类似的方法实现无锁的查找过程,它大概这么工作: 数据分前台和后台。 检索线程只读前台,不用加锁。 只有一个写线程:修改后台数据,切换前后台,睡眠一段时间,以确保老前台(新后台)不再被检索线程访问。 这个方法的问题在于它假定睡眠一段时间后就能避免和前台读线程发生竞争,这个时间一般是若干秒。由于多次写之间有间隔,这儿的写往往是批量写入,睡眠时正好用于积累数据增量。 但这套机制对“server列表”不太好用:总不能插入一个server就得等几秒钟才能插入下一个吧,即使我们用批量插入,这个"冷却"间隔多少会让用户觉得疑惑:短了担心安全性,长了觉得没有必要。我们能尽量降低这个时间并使其安全么? 3. 实现方式 我们需要写以某种形式和读同步,但读之间相互没竞争。一种解法是

cas 4.X单点登录实战

拈花ヽ惹草 提交于 2020-01-18 19:21:15
使用工具 maven-3.3.9 cas-4.1.4 Tomcat-7.0.57-win-x64 cas-sample-java-webapp 一、Hello cas 1、下载Tomcat,解压;修改其server.xml,增加对SSL支持(具体百度): 1 <Connector SSLEnabled="true" acceptCount="100" clientAuth="false" 2 disableUploadTimeout="true" enableLookups="false" maxThreads="25" 3 port="8443" keystoreFile="G:/work/xxx/tomcat.keystore" keystorePass="YOUR PASSWORD HERE" 4 protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https" 5 secure="true" sslProtocol="TLS" /> 1、从https://github.com/Jasig/cas/releases 下载cas-server对应的版本; 2、解压,使用maven命令mvn package对cas进行编译打包,这里可能会出现2个问题:   a.单元测试不通过==》尝试加上-Dmaven

AES CBC模式下的Padding Oracle解密

别来无恙 提交于 2020-01-18 04:24:33
AES CBC模式下的Padding Oracle解密 /*--> */ /*--> */ */ /*--> */ */ /*--> */ */ /*--> */ */ /*--> */ AES CBC模式下的Padding Oracle解密 目录 1. 简介 2. aes cbc加解密测试程序 3. Padding Oracle Attack过程 4. 总结 1 简介 Padding Oracle攻击方法出现的也比较早了,参考 padding oracle attack ,这篇文章写的比较好。 也可以参考 ctf-wiki 。 Padding Oracle Attack主要是针对CBC分组加密的情况,通过padding来测试每个分组的每个字节是否正确来获取分组的中间状态值,上一个分组XOR中间状态值就是明文。第一个分组使用初始IV来XOR获得明文。 图1 CBC模式一个分组的解密过程 2 aes cbc加解密测试程序 用FLASK实现一个aes cbc加解密的测试程序,代码如下,保存为aes_server.py: #!/usr/bin/python # coding=utf-8 # python 3 # 安装依赖 pip3 install PyCrypto flask # 运行 FLASK_APP=aes_server.py flask run from http.server

试议常用Javascript 类库中 throttle 与 debounce 辅助函数的区别

佐手、 提交于 2020-01-18 03:54:59
问题的引出 看过我前面两篇博客的童鞋可能会注意到都谈到了事件处理的优化问题。 在很多应用中,我们需要控制函数执行的频率, 例如 窗口的 resize,窗口的 scroll 等操作,事件触发的频率非常高,如果处理函数比较复杂,需要较多的计算时间,那么会加重浏览器的负担,这时我们很自然会想到:能否在不影响显示效果(对显示效果影响在可接受范围内)的前提下减少事件响应函数的执行频率呢? 朴素的解决思路 首先我们会想到设置一定的时间范围 delay ,每隔 delay ms 执行不超过一次。 事件处理函数什么时候执行能? 这里有两个选择,一是先执行,再间隔 delay ms来等待;或者是先等待 delay ms,然后执行事件处理函数。 操作过程中的事件全不管,反正只执行一次事件处理。 相同低,这一次的事件处理可以是先执行一次,然后后面的事件都不管; 或者前面的都不管,最后操作完了再执行一次事件处理。 当然上面是简单的通俗描述。 throttle 与 debounce 函数现状 throttle与debounce即是对上面两种思路的具体实现。 在现在很多的javascript框架中都提供了这两个函数。例如 jquery中有throttle和debounce插件, underscore.js ,Lo-dash.js 等都提供了这两个函数。 释义 throttle 在英文中是节流阀的意思,顾名思义

JavaScript基础学习--08 JS作用域

微笑、不失礼 提交于 2020-01-18 02:51:42
Demos: https://github.com/jiangheyan/JavaScriptBase 一、浏览器 1、“JS解析器”(至少分为两步骤) 1.1 JS预解析(代码正式运行之前的准备工作) “找一些东西并形成一个 仓库 ”:var、function、参数 1.1.1 var a = 1; 找到var a = undefined (所有的变量在正式运行代码之前,都提前赋值:未定义;--》undefined) 1.1.2 function fn(){ alert(......); } 找到fn = function fn(){ alert(......); } (所有的函数在正式运行之前都是整个函数块) 1.1.3 预解析规则 : 1.1.3.1 遇到 重名 的: 只留一个 ------变量和函数重名,选择留下函数;同等级的留下后面那个(两个变量重名留后者;两个函数重名留后者) 1.1.3.2 表达式可以修改仓库中的值 1.1.3.2.1 表达式:+-*/ Number()...... 注意:函数只是一个声明,不是表达式 1.2 逐行解读代码 1 alert(a); // function a(){alert(4);} 2 var a = 1; // 表达式能改变仓库中(预解析仓库)的值---> a = 1 3 alert(a); // 1 4 5 function a(

转:彻底理解js中this的指向,不必硬背

丶灬走出姿态 提交于 2020-01-17 13:50:46
转: http://www.cnblogs.com/pssp/p/5216085.html 首先必须要说的是, this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁 , 实际上this的最终指向的是那个调用它的对象( 这句话有些问题,后面会解释为什么会有问题,虽然网上大部分的文章都是这样说的,虽然在很多情况下那样去理解不会出什么问题,但是实际上那样理解是不准确的,所以在你理解this的时候会有种琢磨不透的感觉 ) ,那么接下来我会深入的探讨这个问题。   为什么要学习this?如果你学过函数式编程,面向对象编程,那你肯定知道干什么用的,如果你没有学过,那么暂时可以不用看这篇文章,当然如果你有兴趣也可以看看,毕竟这是js中必须要掌握的东西。 例子1: function a(){ var user = "追梦子"; console.log(this.user); //undefined console.log(this); //Window } a(); 按照我们上面说的this最终指向的是调用它的对象,这里的函数a实际是被Window对象所点出来的,下面的代码就可以证明。 function a(){ var user = "追梦子"; console.log(this.user); //undefined console.log(this);  /

Oracle中的方法

三世轮回 提交于 2020-01-16 19:39:29
方法 方法中必须有一个返回值,暂时还不会编写聚合方法 select fn_simpleTest ( '0507' ) from dual ; CREATE OR REPLACE FUNCTION fn_simpleTest ( riskcode IN VARCHAR2 --险种) RETURN NUMBER IS returnNum NUMBER ; --returnNum BEGIN IF riskcode = '0507' THEN returnNum : = 10507 ; ELSIF riskcode = '0522' THEN returnNum : = 10522 ; ELSE returnNum : = 1 ; END IF ; RETURN returnNum ; END fn_simpleTest ; --字符串拼接函数 CREATE OR REPLACE FUNCTION fn_simpleTest2 ( varStrTable in varchar2 ) return varchar2 is testStr varchar2 ( 4000 ) ; begin for tempCur in ( select distinct ( riskcode ) from varStrTable ) loop testStr : = testStr || tempCur .