云控背景体系 经验总结(表单和文件上传等)

1. qq emoji替代

接收到如许的字符串,经由过程正则匹配到每组方括号然后举行替代

var _str = i.content.replace(/\[.{1,3}\]/g, (str) => {    //i.content为遍历出来的音讯纪录
     var index;
     Object.keys(faceCode).forEach((key, _index) => {    //faceCode为字符串与款式对应的关联,也能够经由过程参数去和背景约定好,不必如许查找
         if (key === str) {
             index = _index;
         }
     });
     if (index) {
         var html = `<img src="https://wx2.qq.com/zh_CN/htmledition/v2/images/spacer.gif" text="${str}" class="qq-emoji qq-emoji${index}"/>`;
         return html;
     }
    return str;
});

2. pre做输入框

2.1 参考的例子

可编辑地区在指定位置插进去html,而且光标位置不转变

2.2一个新鲜的征象, 假如点击button,则编辑框的核心位置不会转变,然则除了button的元素核心就会转变

<button id="btn">点我</button>
<div id="div" style="border: 1px solid gray">点我2</div>
<pre class="pre" style="position:absolute;width:800px;height:240px;background-color: #f5f5f5" contenteditable="true">

$('#btn').click((e) => {
    $('.pre')[0].focus();
});
$('#div').click((e) => {
    $('.pre')[0].focus();
})

3. form表单相干和文件上传

3.1. form表单的enctype

enctype 有三种取值:

  1. application/x-www-form-urlencoded 在发送前编码一切字符(默许)
  2. multipart/form-data 不对字符编码,在运用包括文件上传控件的表单时,而且不必FormData数据对象必需运用该值
  3. text/plain 空格转换为 “+” 加号,但不对特别字符编码

固然也能够不必设置enctype为multipart/form-data,即不经由过程表单天生的数据,而是手动取数据,用FormData合并成一个对象,举行发送

3.2. 文件上传的劈头

最早的HTTP POST是不支撑文件上传的,给编程开辟带来许多题目。然则在1995年,ietf出台了rfc1867,也就是《RFC 1867 -Form-based File Upload in HTML》,用以支撑文件上传。所以Content-Type的范例扩大了multipart/form-data用以支撑向服务器发送二进制数据

3.3 文件上传用files类数组做大小,文件范例的推断

<input type="file" id="test" />
var files = document.getElementById("test").files;
for (var i in files) {
    if (files[i].type.indexOf('image') === -1) {
        xxx
        return;
    }
    if (files[i].size/(1024*1024) > 1) {
        xxx
        return;
    }
}

3.4. 清空input输入框,不然第二次挑选雷同的文件不会触发change事宜

$('#upload')[0].value = "";

3.5. 展现当地上传图片 用FileReader对象读取为base64

var fileReader = new FileReader();
fileReader.onload = (e) => {
    document.getElementById('picPreview').src = e.target.result;
};
var file = document.getElementById('#upload').files[0];
fileReader.readAsDataURL(file);

3.6. 上传视频,当地天生缩略图

  1. 用户点击 input type=file 触发 change读取 input.files,
  2. 取得 File 实例建立一个url URL.createObjectURL(file)video 加载 url ,
  3. 随意找一帧,drawImage() 画到 canvas 上把 canvas 转换为 img
function createImg() {
    var scale = 0.15,
    video = $('#video')[0],
    canvas = document.createElement("canvas"),
    canvasFill = canvas.getContext('2d');
    canvas.width = video.videoWidth * scale;
    canvas.height = video.videoHeight * scale;
    canvasFill.drawImage(video, 0, 0, canvas.width, canvas.height);

    return canvas.toDataURL("image/jpeg");
}
$('#upload')[0].onchange = (e) => {
    var windowURL = window.URL || window.webkitURL;
    var videoURL = windowURL.createObjectURL(e.target.files[0]);
    $('#video').attr('src', videoURL);
    
    setTimeout(() => {   //一定要加延时,不然图片读取不到
        var imgSrc = createImg();
        $('#img').attr('src', imgSrc);
    }, 500)
}

4. 做一个页面,起首要把数据结构,用户操纵哪些数据想邃晓

5. 做UI交互,要把用户一定要做的操纵自动做掉,把不确定的操纵让用户本身挑选。

    原文作者:韦磊
    原文地址: https://segmentfault.com/a/1190000013810198
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞