js代码

js 动画提示数据有变化

余生颓废 提交于 2020-02-27 22:51:45
let groupZiArray = $。。。。。; for (let i = 1; i < groupZiArray.length; i++) { let $groupZi = $(groupZiArray[i]); //有变化的话进行提示 if ($groupZi.html() != ('子分组' + i)) { $groupZi.animate({ fontSize: '18px' }, 300, function() { $groupZi.html('子分组' + i); $groupZi.animate({ fontSize: '16px' }, 300); }); } 核心代码animate,代码效果是如果html内容发生了变化,那么就将字体先变大一点,再恢复之前大小。 支持以下属性 backgroundPositionX backgroundPositionY borderWidth borderBottomWidth borderLeftWidth borderRightWidth borderTopWidth borderSpacing margin marginBottom marginLeft marginRight marginTop outlineWidth padding paddingBottom paddingLeft paddingRight

JS-重写内置的call、apply、bind

情到浓时终转凉″ 提交于 2020-02-27 17:29:33
首先看call和apply,第一个参数就是改变的this指向,写谁就是谁,如果是非严格模式下,传递null或undefined指向的也是window,二者唯一的区别是执行函数时,传递的参数方式不同,call是一个个的传递,apply是把需要传递的参数放到数组中整体传递。   ·func.call([context], x, y)   ·func.apply([context], [x, y]) 再看bind,它和call和apply都是改变this并且传递一些参数,不同于call和apply在改变this的同时直接把函数就执行了,bind不会立即执行函数。 let obj = { fn(x, y) { console.log(this, x, y); } }; obj.fn.call({}, 10, 20); // {}, 10, 20 obj.fn.apply(window, [10, 20]); //window, 10, 20 setTimeout(obj.fn.bind(30, 10, 20), 1000); //Number(30), 10, 20 先试着重写一下bind: 从参数看,首先是传递一个this指向并需要做一下处理,后续还有若干个参数 function bind(context) { //context可能是null或undefined,需要处理一下 if

【Python3爬虫】一次应对JS反调试的记录

天大地大妈咪最大 提交于 2020-02-27 17:28:51
一、前言简介   在前面已经写过关于 JS 反调试的博客了,地址为: https://www.cnblogs.com/TM0831/p/12154815.html 。但这次碰到的网站就不一样了,这个网站并不是通过不断调试消耗内存以反调试的,而是直接将页面替换修改掉,让人无法调试页面。    二、网页分析   本次爬取的网址为: https://www.aqistudy.cn/ ,但打开开发者工具后,页面变成了下面这样:      很明显这是触发了反爬,页面直接被替换掉了。当我们打开开发者工具时,程序检测到了开发者工具被打开了,所以触发反爬,将页面修改成了上面的样子。   页面被修改了,我们就没办法了吗?自然是有对策的,我们可以查看一下网页源码,在开发者工具中切换到 Source 选项,找到首页 index 的源码,如下图:      往下翻找,可以找到如下内容,可以看到在 endebug() 方法中就是修改页面的代码:      通过查看上面的代码可以发现,debugflag 就是判断条件,而 loadTad() 则是获取数据的接口,当程序检测到开发者工具被打开时,debugflag 的值改为 true,endebug() 函数执行,页面也就被修改掉了。   那么 endebug() 方法的具体内容是什么呢?全局搜索“endebug”,可以找到一个 JavaScript 文件

js 大文件分片上传处理

可紊 提交于 2020-02-27 15:28:06
这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。 首先是文件数据接收逻辑,负责接收控件上传的文件块数据,然后写到服务器的文件中。控件已经提供了块的索引,大小,MD5和长度信息,我们可以根据需要来灵活进行处理,也可以将文件块的数据保存到分布式存储系统中。 文件初始化部分 第一步:获取RandomAccessFile,随机访问文件类的对象 第二步:调用RandomAccessFile的getChannel()方法,打开文件通道 FileChannel,这块逻辑可以优化,如果以后有分布式存储需求,可以改为分布式存储,减轻单台服务器的压力。 第三步:获取当前是第几个分块,计算文件的最后偏移量 第四步:获取当前文件分块的字节数组,用于获取文件字节长度 第五步:使用文件通道FileChannel类的 map()方法创建直接字节缓冲器 MappedByteBuffer 第六步:将分块的字节数组放入到当前位置的缓冲区内 mappedByteBuffer.put( byte [] b); 第七步:释放缓冲区 第八步:检查文件是否全部完成上传 文件夹扫描类 存储路径生成类

js 预编译

落花浮王杯 提交于 2020-02-27 15:02:42
js 运行代码的时候分为几个步骤: 语法分析 ==》 预编译 ==》 解释执行 语法解析: 通篇扫描代码,查看语法是否出错 解释执行 : 读一行 - 解释一行 - 执行一行 预编译执行的操作: // 假设之前并没有定义a console.log(a); 打印结果: Uncaught ReferenceError: a is not defined 这个大家应该都知道: 在变量未定义时就对变量进行访问就会报错(typeof 列外) 再看一个例子: 1 // 假设之前并没有定义变量a 2 console.log(a); 3 4 var a = 123; 5 6 console.log(a); 看上面代码会打印什么?会不会报错? 打印结果: undefined 123 为什么这个没有报错:因为在预编译的时候对变量进行了提升即 变量提升。 定义的变量的声明(var a ;)被提到了代码块的最前面,变量的赋值操作(a = 123)没有变化。 所以被编译后就相当于 1 // 假设之前没有定义变量a 2 var a; 3 4 console.log(a); 5 6 a = 123; 7 8 console.log(a); 看下面这个例子: 1 // 假设之前没有定义test 2 console.log(test); 3 4 var test = 123; 5 6 function test ()

js文件分片上传,断点续传

痴心易碎 提交于 2020-02-27 14:27:20
核心原理: 该项目核心就是文件分块上传。前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题。 * 如何分片; * 如何合成一个文件; * 中断了从哪个分片开始。 如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块的轮子,虽然程序员的天性曾迫使我重新造轮子。但是因为时间的关系还有工作的关系,我只能罢休了。最后我选择了百度的WebUploader来实现前端所需。 如何合,在合之前,我们还得先解决一个问题,我们如何区分分块所属那个文件的。刚开始的时候,我是采用了前端生成了唯一uuid来做文件的标志,在每个分片请求上带上。不过后来在做秒传的时候我放弃了,采用了Md5来维护分块和文件关系。 在服务端合并文件,和记录分块的问题,在这方面其实行业已经给了很好的解决方案了。参考迅雷,你会发现,每次下载中的时候,都会有两个文件,一个文件主体,另外一个就是文件临时文件,临时文件存储着每个分块对应字节位的状态。 这些都是需要前后端密切联系才能做好,前端需要根据固定大小对文件进行分片,并且请求中要带上分片序号和大小。前端发送请求顺利到达后台后,服务器只需要按照请求数据中给的分片序号和每片分块大小(分片大小是固定且一样的)算出开始位置,与读取到的文件片段数据,写入文件即可。 为了便于开发,我 将服务端的业务逻辑进行了如下划分,分成初始化

解决掉你心中 js function与Function的关系的疑问

雨燕双飞 提交于 2020-02-27 08:39:47
前言 在网上有很多关于js function 与 Function直接关系的文章。 但是我感觉过于抽象化了,那么如何是具体化的解释? 正文部分为个人理解部分,如有不对望指出。 正文 <script> if((function(){}).constructor === Function) { console.log(true); } </script> 我写了一段这个代码,答案为true。 这就是function 与 Function的关系。 看下Function的定义: Function 构造函数创建一个新的 Function 对象。直接调用此构造函数可用动态创建函数,但会遭遇来自 eval 的安全问题和相对较小的性能问题。然而,与 eval 不同的是,Function 构造函数只在全局作用域中运行。 然后还给出了这样一个结论: 每个 JavaScript 函数实际上都是一个 Function 对象。 重新理解一下,Function的定义。 第一句话很好理解,就是可以创建一个Function对象。第二句好也好理解,就是会有安全漏洞和性能问题,详细部分可看eval的安全问题,至于为什么低效,官方解释是:因为使用后者创建的函数是跟其他代码一起解析的。 第三句话,什么叫"Function 构造函数只在全局作用域中运行"? var func = new Function("alert(x

vue-cli中webpack配置解析

不羁岁月 提交于 2020-02-27 08:36:19
版本号 vue-cli 2.8.1 (终端通过 vue -V 可查看) vue 2.2.2 webpack 2.2.1 目录结构 ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── index.html ├── package.json ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ └── Hello.vue │ └── main.js └── static webpack配置 主要对build目录下的webpack配置做详细分析 webpack.base.conf.js 入口文件 entry entry: { app: '.src/main.js' } 输出文件

js基础知识点

我们两清 提交于 2020-02-27 07:11:13
1. 变量声明: var 变量名; J avaScript基础数据类型 包括原始类型和引用类型 原始类型有5个: Number(数值) String(字符串) Boolean(布尔) Null(空) Undefined(未定义) 引用类型有1个: Object(对象) 通过typeof(x)可以返回一个变量x的数据类型; 注意一点:typeof运算符对于null类型返回的是object 2.函数 1.函数:函数就是可以重复执行的代码块。 2.语法:function 函数(){} 3.调用:函数定义了,一定要调用 4.形参,实参,实参写在调用函数的括号里,实参写在定义函数括号里 5,返回值 return 返回值返回了要接收,接受的是调用函数。 6,Js不能重载(就是两个函数名相同,下面的函数会把上面的函数覆盖) 7.匿名函数 function(){} 没有函数名,一般要与变量或者事件结合起来使用 8.作用域:全局变量,局部变量。 局部变量只能在函数内部使用。代码执行完,定义的变量也就消失了。 全局变量可以在任何地方使用。 3.循环 ① while循环 while用于循环作用基本一致,通常用来循环数组 语法:while(条件){循环体} ②  do while循环,do while 是while的一个亲戚,它在循环开始前先执行一次操作,然后才进行判断,true就继续执行

微信公众号爬虫技术分享

…衆ロ難τιáo~ 提交于 2020-02-27 06:50:29
采集方案分析对比 目前主流的抓取公众号文章及动态信息不同采集方案对比如下: 由上图可知: 如果需要长期监控公众号实时的文章,我推荐使用逆向的方式; 如果要做获取文章阅读点赞评论量或搜狗微信转永久链接等接口,推荐使用万能key的方式; 至于中间人的方式,技术门槛低,开发周期短,如果要监控的公众号不多,且实效性要求不那么高,我推荐使用这种方式。 下面将详细介绍基于中间人方式采集的原理 采集方案详解 基于中间人方式 采集原理 中间人好比中介,这里指抓包工具,大致的原理图如下 微信客户端之所以可以看到文章信息,是因为请求了微信的服务器,服务器收到请求后,将对应的文章返给客户端。这里我们通过抓包工具(中间人)拦截数据,将拦截到的文章数据解析入库,就完成了一次简单的数据抓取。 那么如何实现多个文章自动抓取,及列表页自动翻页呢。总不能人肉去点吧。那么最先想到的是自动化工具,比如大家都知道的按键精灵。但是这种自动化工具如何与抓包工具交互,是个问题。我们要保证在数据被拦截入库之后,再去点击下一个抓取的目标,又或者当网络异常时,自动化工具如何检测出来,然后重刷当前页面,发起请求。即使可以实现,应该也很麻烦,所以没采用这种方法。本人也不喜欢自动化工具,总感觉它不稳定。。。 既然微信文章界面是html的,我们可以嵌入js嘛,让他自动跳转。那么如何在文章和源代码里嵌入自己的js呢?这时中间人就派上用场了