zoukankan      html  css  js  c++  java
  • js移动、pc端笔记

    联图网在线二维码生成接口
    // 获取支付二维码
    getPayCode() {
    let para = {
    "MemberId": this.employeeId,
    "orderId": this.orderId,
    "payType": 7,
    };
    this.adminApi(para,'获取支付二维码').then((res) => {
    if(res.code===200){
    let imgDiv = document.getElementById('imgDiv');
    let img = document.createElement("img");
    img.src = 'http://qr.topscan.com/api.php?&text='+encodeURIComponent(res.data.code_url);
    img.style = " 60px;height: 60px;margin: 15px;"
    imgDiv.appendChild(img)
    }
    });
    },
     map和filter的用法及区别
    map函数之后,数组元素个数不变,但元素属性发生了变化。
    filter函数之后,数组元素个数改变,但是元素属性不会改变。
    说的通俗一点,就是map一般用来处理元素属性,filter一般用来筛选想要的元素。

    20191231 数字相加减
    var c = Number(a) + Number(b)
    20191231 批量修改数组中每个对象的属性值
    arr = arr.map(function(item,index,arr) {
    item.age = 1;
    return item;
    })
    禁止图文被复制
    -webkit-user-select: none;
    -ms-user-select: none;
    -moz-user-select: none;
    -khtml-user-select: none;
    user-select: none;

    <img src="" oncontextmenu="return false;"> // 禁止鼠标右键保存图片
    <img src="" ondragstart="return false;"> // 禁止鼠标拖动图片
    20190923 对象合并
    Object.assign({name:111},{age:18})
     常见的数组合并 用concat拼接 用的比较多 但对象合并 相对来说适应场景比价少
    个人使用场景:封装小程序request请求时 header中要传默认的token 但是有些接口又特殊需要传入一些参数

    手机端点击输入框时禁止调起键盘
    <input type="text" onfocus="this.blur()">
    <input type="text" readonly="readonly" />
    H5页面唤起本地摄像头
    <!--只可进行拍照-->
    <input type="file" accept="image/*" capture="camera">
    <!--只可进行拍摄视频-->
    <input type="file" accept="video/*" capture="camcorder">
    <!--可选取本地照片和拍照-->
    <input type="file" accept="image/*">
    <!--可选取本地视频和拍摄视频-->
    <input type="file" accept="video/*">
    同步(sync)和异步(async)的区别
    js是属于单线程的,也就是我们说的同步,但有时候需要异步

    单线程:所有的任务由一个线程来完成
    多线程:多个任务可分配给不同的线程来完成

    同步:在进程中任务未结束时需等待结束才能执行下一个任务
    异步:在进程中任务未结束但在等待的过程中可先去执行下一个任务

    简单来说:同步就是排队来执行,异步就是同时去执行

    ajax请求时async属性默认为true,也就是说默认就是异步的,要想改成同步进行,修改async属性改为false
    js逻辑中有三种解决方案,第一是方法嵌套,第二是setTimeout控制执行时间,第三是es6新增的promise特性
    input type="file"时修改其默认样式
    <label style="position: relative">
    <button style="margin-right: 5px;">选择文件</button>
    <input type="file" @change="getFile2" style="position: absolute;left: 0;top: 0;opacity: 0; 70px">
    <a v-if="form.S_SlnPdfUri!==''" target="_blank" :href="form.S_SlnPdfUri">{{form.S_SlnPdfUri}}</a>
    <span v-if="form.S_SlnPdfUri===''" style="color: gray">未选择任何文件</span>
    </label>
    h5如何动态设置meta标签的描述内容
    <meta property="fb:app_id" name="description"> // 设置标签
    var metaList = document.getElementsByTagName("meta"); // 拿到标签
    for (var i = 0; i < metaList.length; i++) {
    if (metaList[i].getAttribute("property") == "fb:app_id") {
    metaList[i].content = '这是一段描述'; // 设置描述
    }
    }
    h5内嵌在app时,做微信分享,动态传递分享标题和图片路径给ios
    // 前端在页面中动态绑定文字内容并将其隐藏掉
    <div v-show="false" id="SeoDescription">{{obj.SeoDescription}}</div>
    <div v-show="false" id="PhotoURL">{{obj.PhotoURL}}</div>

    // ios那边通过id去获取相应的值 标题和路径
    NSString *htmlTitle = @"document.title";
    NSString *htmlNum = @"document.getElementById('PhotoURL').innerText";
    js判断网页是否是在微信浏览器中打开
    function isWeiXin(){
    var ua = window.navigator.userAgent.toLowerCase(); // 该属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息
    //通过正则表达式匹配ua中是否含有MicroMessenger字符串
    if(ua.match(/MicroMessenger/i) == 'micromessenger'){
    return true;
    }else{
    return false;
    }
    }
    js判断当前浏览器是否是在移动端
    if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
    // console.log('移动端');
    this.isPc=false;
    } else {
    // console.log('pc端');
    this.isPc=true;
    }
    js做消息通知声音提示
    $('audio').remove();
    let audioElementHovertree = document.createElement('audio');
    audioElementHovertree.setAttribute('src', 'http://w.qq.com/audio/classic.mp3');
    audioElementHovertree.setAttribute('autoplay','autoplay'); //打开自动播放
    input type="number"时如何限制输入长度
    <input type="number" oninput="if(value.length>11)value=value.slice(0,11)">
    es6中promise的使用
    new Promise(function(resolve, reject){
    // 先执行
    resolve();
    }).then(function (data) {
    // 再执行
    });
    js开启和禁止页面滑动
    // 定义方法
    bodyScroll(event){
    event.preventDefault();
    },
    // 禁止滑动
    document.body.addEventListener('touchmove',this.bodyScroll,false);
    $('body').css({'position':'fixed',"width":"100%"});
    // 开启滑动
    document.body.removeEventListener('touchmove',this.bodyScroll,false);
    $("body").css({"position":"initial","height":"auto"});
    js复制输入框和非输入框的内容
    // 复制输入框的内容
    1. <input id="input" type="text">
    2. document.getElementById("input").select(); // 选择对象
    3. document.execCommand("copy"); // 执行浏览器复制命令

    // 复制非输入框中的内容
    1. <input id="input" type="text" style="position: absolute;z-index: -1">
    <span id="code">852965</span>
    2. var code = document.getElementById("code").innerText;
    var input = document.getElementById("input");
    input.value = code; // 修改文本框的内容
    input.select(); // 选中文本
    document.execCommand("copy"); // 执行浏览器复制命令

    // 以上方法在pc端没有任何问题 但在移动端 发现并未复制成功 存在一定的缺陷 故采用下面引入clipboard插件的方法
    1. cnpm install clipboard --save // 安装clipboard
    2. import ClipboardJS from 'clipboard'; // 在需要的单个页面引入
    3. <div>邀请码{{code}</div>
    <div class="copy_btn" :data-clipboard-text="code" @click="copy">复制</div>
    4. copy() {
    const clipboard = new ClipboardJS('.copy_btn');
    clipboard.on('success', function(e) {
    e.clearSelection();
    alert('复制成功')
    });
    clipboard.on('error', function(e) {
    alert('复制失败');
    });
    },
    js获取url后面多个参数的方法
    // 网上搜索到的最常见的方法 此方法存在的缺陷 当url中有#(vue-cli项目)或者是微信QQ分享出来的链接会自动拼接参数(?from=)等都会影响location.search的正确获取
    getQueryString(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = window.location.search.substr(1).match(reg);
    if (r != null) return unescape(r[2]);
    return null;
    }
    // ios
    朋友圈 from=timeline&isappinstalled=0(或者appinstall=0)
    微信群 from=groupmessage&isappinstalled=0
    好友分享 from=singlemessage&isappinstalled=0
    // android
    朋友圈 from=timeline
    微信群 from=groupmessage
    好友分享 from=singlemessage

    // 刚开始对于#的处理采用的是定位?下标位置手动截取search的方式,后来有了?from=,采用的是定位?参数下标的位置手动截取search
    // 接下来面临的第三个问题,app分享时并未安顺序给你拼接参数,也就是你这边截取的第一个参数它可能放在了其他位置,所以,采用的解决方案是 忽略# 忽略分享出来的& 将所有的?from=给替换掉 然后根据?下标去截取search
    getQueryString(name) {
    var url = location.href.replace('?from=',''); // 只要替换掉?开头的即可 &不影响search的截取
    var search = url.substr(url.indexOf('?')); // 根据?的位置 截取search
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = search.substr(1).match(reg);
    if (r != null) return unescape(r[2]);
    return null;
    }
    js进行图片压缩 
    // 图片压缩
    canvasDataURL(path, obj, callback){
    var img = new Image();
    img.src = path;
    img.onload = function(){
    var that = this;
    // 默认按比例压缩
    var w = that.width,
    h = that.height,
    scale = w / h;
    w = obj.width || w;
    h = obj.height || (w / scale);
    var quality = 0.7; // 默认图片质量为0.7
    //生成canvas
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    // 创建属性节点
    var anw = document.createAttribute("width");
    anw.nodeValue = w;
    var anh = document.createAttribute("height");
    anh.nodeValue = h;
    canvas.setAttributeNode(anw);
    canvas.setAttributeNode(anh);
    ctx.drawImage(that, 0, 0, w, h);
    // 图像质量
    if(obj.quality && obj.quality <= 1 && obj.quality > 0){
    quality = obj.quality;
    }
    // quality值越小,所绘制出的图像越模糊
    var base64 = canvas.toDataURL('image/jpeg', quality);
    // 回调函数返回base64的值
    callback(base64);
    }
    },
    // 拍照
    makePhoto(e){
    var file = document.getElementById('photo').files[0];
    if (window.FileReader) { //如果浏览器支持FileReader
    var reader = new FileReader(); //新建一个FileReader对象
    reader.readAsDataURL(file); //读取文件url
    let self = this;
    reader.onloadend = function (e) {
    // self.cardOrc(e.target.result.replace("data:image/jpeg;base64,",""));
    // console.log(e.target.result)
    self.canvasDataURL(e.target.result,{
    quality: 0.1
    },function (base64) {
    // console.log(base64)
    self.cardOrc(base64.replace("data:image/jpeg;base64,",""));
    });
    };
    }
    file = null;
    },
    js解决ios11系统下input光标错位的问题
    原因分析:iOS11对fixed不兼容导致的,外面的遮罩层引用了fixed定位,输入框弹出页面被顶上去了但是输入框光标还停留在原来的位置。
    解决办法:网上看了一大堆,总结了一种最简单的方法,外面弹框改为absolute定位,弹框打开时将整个容器高度改为页面高度禁止其滚动,弹框关闭时又给还原回来。 

    open(){
    this.isPopup = true;
    document.getElementById('vote').style.height = '100vh'
    document.getElementById('vote').style.overflow = 'hidden'
    },
    close(){
    this.isPopup = false;
    document.getElementById('vote').style.height = 'auto'
    }
    js兼容部分ios手机input失焦后页面上移问题
    (function() {
    let myFunction;
    let isWXAndIos = isWeiXinAndIos();
    if (isWXAndIos) { // 既是微信浏览器 又是ios============(因为查到只有在微信环境下,ios手机上才会出现input失去焦点的时候页面被顶起)
    document.body.addEventListener('focusin', () => { // 软键盘弹起事件
    clearTimeout(myFunction)
    });
    document.body.addEventListener('focusout', () => { // 软键盘关闭事件
    clearTimeout(myFunction);
    myFunction = setTimeout(function() {
    window.scrollTo({top: 0, left: 0, behavior: 'smooth'})// 重点 =======当键盘收起的时候让页面回到原始位置
    }, 200)
    })
    }
    })();
    function isWeiXinAndIos() {
    // window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
    let ua = '' + window.navigator.userAgent.toLowerCase();
    // 通过正则表达式匹配ua中是否含有MicroMessenger字符串且是IOS系统
    let isWeixin = /MicroMessenger/i.test(ua); // 是在微信浏览器
    let isIos = /(i[^;]+;( U;)? CPU.+Mac OS X/i.test(ua); // 是IOS系统
    return isWeixin && isIos
    }
     

     

  • 相关阅读:
    error while loading shared libraries: libhwloc.so.5: cannot open shared object file: No such file or directory
    Mac刷新DNS,修改/etc/hosts立即生效
    zxing生成识别二维码
    电脑M2接口不是磁盘0问题
    WSL
    Ubuntu安装Docker
    Win10关闭自动更新和防护
    Mysql的5种日志
    开发常用工具Windows
    log4j2高危漏洞
  • 原文地址:https://www.cnblogs.com/gerry/p/12334651.html
Copyright © 2011-2022 走看看