zoukankan      html  css  js  c++  java
  • 常用方法(算法)使用总结

    常用方法(算法)使用总结

    一,浏览器禁用常规方法

    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('
    ').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         }
  • 相关阅读:
    Java读取Excel文件(包括xls和xlsx)的样例程序
    Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法
    Spring Boot中一个Servlet主动断开连接的方法
    算法学习笔记1.3.3 质因数分解
    算法学习笔记1.3.2 素数判定
    算法学习笔记1.3.1 素数筛法
    算法学习笔记1.2.2 扩展欧几里得
    算法学习笔记1.2.1 欧几里得算法
    算法学习笔记1.1.3 矩阵的逆
    Windows下Tesseract-OCR的安装
  • 原文地址:https://www.cnblogs.com/jackson-yqj/p/11497120.html
Copyright © 2011-2022 走看看