禁止鼠标滚动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<h2>js实现强制禁止页面滚动的方法</h2>
<p>
</p><div id="wrap" style="position:absolute;left:100px;top:100px;background:#eee;width:300px;height:300px;">
<h1 id="he" style="text-align:center;width:100%;color:#f00;">0</h1>
鼠标移动这里,禁止转动滚轮!<br>鼠标移出这里,开启转动滚轮!<br>
</div>
<p></p>
<script>
window.onload = function() {
for (i = 0; i < 50; i++) {
var x = document.createElement('div');
x.innerHTML = "js<br/>";
document.body.appendChild(x);
}
function $(x) {
return document.getElementById(x);
};
$("wrap").onmousewheel = function scrollWheel(e) {
var sl;
e = e || window.event;
if (navigator.userAgent.toLowerCase().indexOf('msie') >= 0) {
event.returnValue = false;
} else {
e.preventDefault();
};
if (e.wheelDelta) {
sl = e.wheelDelta;
} else if (e.detail) {
sl = -e.detail;
};
if (sl < 0) {
var x = parseInt($("he").innerHTML);
x++;
$("he").innerHTML = x;
} else {
var x = parseInt($("he").innerHTML);
x--;
$("he").innerHTML = x;
};
};
if (navigator.userAgent.toLowerCase().indexOf('firefox') >= 0) {
//firefox支持onmousewheel
addEventListener('DOMMouseScroll',function(e) {
var obj = e.target;
var onmousewheel;
while (obj) {
onmousewheel = obj.getAttribute('onmousewheel') || obj.onmousewheel;
if (onmousewheel) break;
if (obj.tagName == 'BODY') break;
obj = obj.parentNode;
};
if (onmousewheel) {
if (e.preventDefault) e.preventDefault();
e.returnValue = false; //禁止页面滚动
if (typeof obj.onmousewheel != 'function') {
//将onmousewheel转换成function
eval('window._tmpFun = function(event){' + onmousewheel + '}');
obj.onmousewheel = window._tmpFun;
window._tmpFun = null;
};
// 不直接执行是因为若onmousewheel(e)运行时间较长的话,会导致锁定滚动失效,使用setTimeout可避免
setTimeout(function() {
obj.onmousewheel(e);
},1);
};
},false);
};
}
</script>

10 进制和 2 进制互相转换

1
2
3
// 浮点数不行
var toTwoNumber=(35).toString(2)
var toTenNumber=parseInt(twoNumber,2)

获取页面window监听的事件名称

放在所有代码开头

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 获取页面window监听的事件名称
* for(const eventname of listenerList){
* console.log(eventname)
* }
*/
((w)=>{
w.listenerList=new Set()
const _cache=w.addEventListener
const handler={
apply:(target,thisBinding,args)=>{
target()
listenerList.add(args[0])
// _cache.apply(w,args)
Reflect.apply(_cache,w,args)
}
}
w.addEventListener=new Proxy(()=>{
console.log('现在绑定了一个事件,通过 window.listenerList 可查看所有已绑定事件')
},handler)
})(window)
window.addEventListener('resize',function(){
console.log('窗口正在发生变化')
})
for(const eventname of listenerList){
console.log(eventname)
}

JS防抖与节流

防抖:上个请求未结束,下个请求就发出,可能会造成其它影响,因此需要防抖。
节流:防止一个请求在短时间内多次请求,如100ms请求了10次,浪费流量,因此需要节流。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 节流
let timer=null
function throttling(){
clearTimeout(timer)
timer=setTimeout(function(){
// 发起请求
},300)
}
// 防抖
let flag=null
function (){
if(flag){
return;
}
flag=true;
$.get('/api',function(){
flag=false;
},function(){
flag=false;
})
}

arguments数组转为参数

1
2
3
4
5
6
7
function a(a1,a2){
console.log(a1,a2)
}
function b(){
a.apply(null,arguments)
}
b(1,2,3,4,5,6) // 1 2

合并 JSON

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
var a={a:{b:{c:1}},b:2,c:3},b={a:{e:2},b:{}};
var util={
type:{
Object:'[object Object]',
Undefined:'[object Undefined]'
},
judge:function(d,t){return Object.prototype.toString.call(d)===this.type[t]},
isUndefined:function(d){return this.judge(d,'Undefined')},
isObject:function(d){return this.judge(d,'Object')},
isArray:function(d){return Array.isArray(d)},
mergeJson:function(oa,ob){
if(!util.isObject(oa)||!util.isObject(ob)){
return ob
}
for(var i in oa){
// ob[i] 不存在,或者为 undefined,则用 oa[i] 替换
if(util.isUndefined(ob[i])){
ob[i]=oa[i]
}
// 两个都为对象继续迭代
if(util.isObject(oa[i]) && util.isObject(ob[i])){
util.mergeJson(oa[i],ob[i])
}
if(util.isArray(oa[i])&&util.isArray(ob[i])){
ob[i].concat(oa[i])
}
}
return ob;
}
}
const merge=util.mergeJson;
const result=merge(a,b)

英文引号转中文引号

1
2
3
4
5
6
7
8
var strArr=str.split('"'),newStr='',flag=true;
while(titleArr.length){
newStr+=titleArr.shift();
if(titleArr.length){
newStr+=["“","”"][+(falg=!flag)]
}
}
console.log(newStr);