常用方法(算法)使用总结
常用方法(算法)使用总结
一,浏览器禁用常规方法
1,禁用右键
1 document.oncontextmenu = function(){ 2 event.returnValue = false; 3 } 4 // 或者 5 document.oncontextmenu=new Function("event.returnValue=false"); 6 // 或者直接返回整个事件 7 document.oncontextmenu = function(){ 8 return false; 9 }
2,禁用网页上选取内容
1 document.onselectstart = function(){ 2 event.returnValue = false; 3 } 4 // 或者 5 document.onselectstart=new Function("event.returnValue=false"); 6 // 或者直接返回整个事件 7 document.onselectstart = function(){ 8 return false; 9 }
3,禁用网页上选取内容
1 document.oncopy = function(){ 2 event.returnValue = false; 3 } 4 // 或者 5 document.oncopy =new Function("event.returnValue=false"); 6 // 或者直接返回整个事件 7 document.oncopy = function(){ 8 return false; 9 }
同时也可以直接加在body上
1 <body oncontextmenu = "return false" ></body> 2 <body onselectstart = "return false" ></body> 3 <body oncopy = "return false" ></body> 4 <!-- 方法一致 写法不一样 --> 5 <body oncontextmenu="event.returnValue=false" onselectstart="event.returnValue=false" oncopy="event.returnValue=false">
二,web端获取客户端IP
1 getlocalIP = (callback) => { 2 let PeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection 3 let peer = new PeerConnection({ 4 iceServers: [] 5 }) 6 peer.createDataChannel('') 7 peer.createOffer().then((offer) => { 8 peer.setLocalDescription(offer) 9 }) 10 peer.onicecandidate = function (e) { 11 if (e.candidate) { 12 let reg = /([0-9]{1,3}(\.[0-9]{1,3}){3})/ 13 e.candidate.candidate.split('\n').forEach((str) => { 14 str = reg.exec(str) 15 let IP = '' 16 if (str && str.length > 1) { 17 IP = str[1] 18 } 19 if (callback && typeof callback == 'function') { 20 callback(IP) 21 } 22 }) 23 } 24 } 25 } 26 27 // 获取ip地址 28 getlocalIP(function (ip) { 29 if(ip){ 30 alert('ip===' + ip) 31 } 32 })
三,横向转纵向排序算法
数组动态渲染默认是横向渲染,如果想使用纵向渲染,则改变渲染数组的顺序,则可实现界面纵向渲染的效果。
第一步:根据渲染的列数,需将一维数组转换为二维数组
1 //将一维数组 转多维数组 2 let len = baseArray.length; 3 let n = Math.ceil(len / columnNumber); //每行显示的个数 4 let lineNum = len % n === 0 ? len / n : Math.floor((len / n) + 1); 5 let tempArray = []; 6 for (let i = 0; i < lineNum; i++) { 7 // slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。 8 let temp = baseArray.slice(i * n, i * n + n); 9 tempArray.push(JSON.parse(JSON.stringify(temp))); 10 }
第二步:实现二维数组横纵列转换
1 //实现二维数组横纵列转换 2 let newArray = tempArray[0].map(function (col, index) { 3 return tempArray.map(function (row) { 4 return row[index]; 5 }) 6 });
第三步:将多维数组转一维数组并去空
1 newArray = [].concat.apply([], newArray);//将多维数组 转一维数组 2 let convertedArray = []; 3 //遍历去掉空的数据 4 newArray.map(function (item) { 5 if (item) {//保留对象数据 6 convertedArray.push(item) 7 } 8 });
第四步:完成代码如下
1 function horizontalToVerticalSort(baseArray,columnNumber=3) { 2 //将一维数组 转多维数组 3 let len = baseArray.length; 4 let n = Math.ceil(len / columnNumber); //每行显示的个数 5 let lineNum = len % n === 0 ? len / n : Math.floor((len / n) + 1); 6 let tempArray = []; 7 for (let i = 0; i < lineNum; i++) { 8 // slice() 方法返回一个从开始到结束(不包括结束)选择的数组的一部分浅拷贝到一个新数组对象。且原始数组不会被修改。 9 let temp = baseArray.slice(i * n, i * n + n); 10 tempArray.push(JSON.parse(JSON.stringify(temp))); 11 } 12 //实现二维数组横纵列转换 13 let newArray = tempArray[0].map(function (col, index) { 14 return tempArray.map(function (row) { 15 return row[index]; 16 }) 17 }); 18 newArray = [].concat.apply([], newArray);//将多维数组 转一维数组 19 let convertedArray = []; 20 //遍历去掉空的数据 21 newArray.map(function (item) { 22 if (item) {//保留对象数据 23 convertedArray.push(item) 24 } 25 }); 26 return convertedArray; 27 }