js 动画
动画过去想要实现动画都是使用定时器,但是定时器的精度不高,可能导致动画播放不平滑。为了使计时精确,便是用requestAnimationFrame(func).并且这个函数还可以有一个参数,它的类型是DOMHighResTimeStamp,表示开始执行回调函数的时刻。
没执行一次requestAnimationFrame(func),他就会执行一次回调函数。但是这并不是一定的,如果调用太快他会自动进行合并。可以认为有一个任务队列,调用这个函数将它插入这个队列中,但是如果队列中有这个函数就不会插入。
function updateProgress(time){ var div = document.getElementById("status"); div.style.width = (parseInt(div.style.width, 10) + 5) + "%"; if(div.style.left != "100%") { requestAnimationFrame ...
链接
基础记得gcc编译器编译的步骤吗?预处理,编译,汇编,链接。首先前两步是为了生成.s的汇编文件,然后第三步就是生成机器码。但是如果第三步就已经完成了所有事为什么还要第四步呢?
首先我们要知道,编译时是各个文件独立编译的,也就是说这个时候如果分配了地址很可能发生这个函数的地址和另外一个文件中函数的地址相同的尴尬事情发生,为了避免这种事情,在编译到.o文件的时候一些其他文件要用的函数和变量使用一个符号来表示的,然后在链接阶段再来连连看把地址安上。
目标文件目标文件有三种:
可重定位目标文件,也就是汇编后形成的.o文件。可以和其他文件链接新城可执行文件
可执行目标文件,也就是可执行文件
共享目标文件,一种特殊的可重定向目标文件,可以在运行时重定向(动态链接)
可重定位目标文件
上面是一个elf文件结构图,这是现在linux中目标文件格式。各种目标文件中都有类似的格式。
ELF头,存放了一些基础信息,例如大端序还是小端序,文件类型等等。
.text节,已编译的机器代码。
.rodata。只读数据,例如printf中的格式串和跳转表
.data;以初始化全局和静态变量
.bss; 未初始化 ...
js异步编程
期约基础期约类似于事件处理。例如let p = new Promise((resolve, reject) => {});setTimeout(console.log, 0, p1);timeout的三个参数第一个是执行的函数,第二个是等待的时间,后面的都是函数的参数
他和普通的timeout的区别在于它可以通过函数设置参数,从而异步决定某些函数是否执行及这些函数的参数。
期约具有三种状态: 待定(pending)、兑现/解决(resolved)、拒绝(rejected)
在待定状态下,期约可以落定,一旦跳转到解决或拒绝状态就不能再变化。
Promise((resolve, reject) => {…}): reslove和reject是跳转到解决或拒绝状态的函数。两个函数都可以传递一个参数,resolve的参数表示解决期约的值(感觉有点像返回值)。reject的参数表示拒绝的理由。此外,reject还会抛出一个异常
new Promise(() => setTimeout(console.log, 0, 'executor' ...
ld链接脚本语法
语法
说明
ENTRY(symbol)
将符号symbol的值作为入口地址(主函数)。ld中有多种方法指定入口地址,他们的优先级如下排列。 1. ld中的-e选项 2. 脚本中的ENTRY 3. _start符号 4. .text段第一个字节地址 5. 0
STARTUP(filename)
将文件filename作为链接中的第一个输入文件
SEARCH_DIR(path)
库查找目录
INPUT(file, file, …)
将指定文件作为输入文件
INCLUDE filename
将指定文件包含进链接脚本(这是对脚本来说的,相当与在脚本中写了#include 加入其他脚本)
PROVIDE(symbol)
在链接脚本中添加某个符号
此外,最基本的命令就是定义段的SECTIONS了,它的格式为:
SECTIONS{ secname : { contents }}secname是输出文件的对应段,contents是输入文件的段其中contents的语法为: filename(sections) ...
js事件
事件流过程<!DOCTYPE html><html> <head> <title>Event Bubbling Example</title> </head> <body> <div id="myDiv">Click Me</div> </body></html>当点击div后.click事件冒泡顺序:1. div2. body3. html4. document也就是从内部不断的向父节点传递,直到传递到根节点
但是如果使用事件捕获,会出现不同的结果。它的顺序正好和前面讲的相反。
而在事件流中,真正的处理顺序是事件捕获、到达目标和事件冒泡。事件捕获时从根节点到达目标节点的过程,事件冒泡是从目标节点到根节点的过程。
事件处理程序事件是用户或浏览器执行的动作,例如单击,单击,悬停等。事件处理程序的名字统一以on开头,例如onclick, onload等。
html事件处理程序
有些处理函数可以在html中直接指定。例如: ...
简截代码结构
工具及基础本软件使用qt5.9.9。IDE推荐qt自带的qtcreater,它的帮助是真的好用,可以节省大量的查阅资料时间。
左边是代码,在insert上按F1即可出现右边帮助
qt基础需要了解qt元对象系统、qt信号槽系统和qt内存管理。
信号槽信号槽是qt特有的信号传递方式。在子类和父类之间如何进行信号传递呢?
父类和子类相互引用父类与子类相互引用解决方法
定义接口定义子类需要使用的接口并且由父类实现,并且把父类的指针以接口的形式传递给子类。这样子类就可以使用父类的部分函数。这样避免了相互引用但是容易引起代码结构混乱,本代码中new_capture/Widgets/Ipoint_position_change就是使用这种思想
使用信号槽
信号槽可以理解为第二种方法,只是qt在后台帮我们生成了许多代码。它首先需要定义一个信号,然后再适当的时机抛出这个信号,然后等待其他代码接收。
发出信号#ifndef LIST_ITEM_H#define LIST_ITEM_H#include<QWidget>#include<QLineEdit>#include< ...
DOM
简介DOM(文档对象模型)是HTML和XML的编程接口,可以通过它查找和修改每一个节点的属性。DOM的表现形式类似于一棵树
document节点是每个文档的根节点,而html是它唯一的子节点,其他元素都在这个文档内。总共有12中类型的节点。这些节点统一由Node定义。
Node.nodeType:定义了节点的类型,总共有十二种类型
Node.ELEMENT_NODE(1): 元素,如html,head等
Node.ATTRIBUTE_NODE(2): 属性,例如图中的href
Node.TEXT_NODE(3): 元素中间的文本
Node.CDATA_SECTION_NODE(4)
Node.ENTITY_REFERENCE_NODE(5)
Node.ENTITY_NODE(6)
Node.PROCESSING_INSTRUCTION_NODE(7)
Node.COMMENT_NODE(8)
Node.DOCUMENT_NODE(9)
Node.DOCUMENT_TYPE_NODE(10)
Node.DOCUMENT_FRAGMENT_NODE(11)
Node.NOTATION_ ...
css选择器
概述选择器是用来快速便捷的查找某一元素的,一个html文档中这么多元素,属性,如果只使用获得某一元素然后遍历再获得子元素的方法那时不可想象的,可能随便查找一个元素都需要几十行代码。
而选择器就是为了简化查找操作的。他将几种常用的标签作为选择的key,只需要知道这些标签内部就会有一套算法帮助我们快速查找,并且还可以几个key连在一起查找。
选择器种类*(清空) #(ID) .(类)*(清空选择器)
这个选择器会选择所有元素,常被用作清空margin和padding
*{ margin: 0; padding: 0;}
#(ID选择器)
它会选择所有匹配的ID
例如<div id="gac_scont"></div>css#gac_scont{ border: 1px solid black;}
.(类选择器)
类选择器会选择对应的类,例如<div class="DH7hPe"></div>css.DH7hPe{ color: re ...
c++ 两个类互相引用
两个类互相引用如#include "b.h"class A{public: A(); void get_data(); void print_b();private: B b; int sum;}---------------------b.h#include "a.h"class B{public: B(); int get_data(); void print_A();private: A a; int sum;}
可以看看上面的过程。加入首先发现a.h,然后根据a.h把b.h拖进来,然后b.h又把a.h拖进来,此时a.h包含a.h和b.h的内容,也就是说b.h定义了两次,因此会报错。
我们可以使用声明提前的方法解决这个问题#ifndef _A_H#define _A_H#include "b.h"class A{public: A(); void get_data(); void print_b ...
BOM
window对象window对象在浏览器中有两重身份,一是Global对象,而是浏览器窗口的js接口。网页中定义的所有对象,变量都可以以window作为Global对象,并且使用parseInt()等方法。
使用var会自动添加到全局对象中。而使用let则不会。window对象还可以用来查询是否存在未声明的变量
var temp = 1;console.log(window.temp);//全局对象加入window中var newValue = oldValue;//报错var newValue = window.oldValue;//这里是属性查询,因此newValue会被设置为undefined而不会报错
窗口操作函数window.self始终指向window本身,window.top始终指向浏览器窗口本身,而window.parent始终指向当前窗口的父窗口,如果本身就是最上层窗口,那么window.parent和window.top相同
window.moveTo(x, y): 将左上角移动到对应位置
window.moveBy(dx, dy): 从当前位置移动若干像素
窗 ...