博尔米奥的雪景,伦巴第大区,意大利 (© Roberto Moiola/Getty Images)

Welcom to 评论 - lizhenqiu blog!

    #1331

    作者:广西南宁市
    文章:Yourphp,thinkphp修改分页代码  发表时间:2017-06-12, 15:35:15  
    展开↯

    #1332

    作者:广西南宁市
    thinkphp引入第三方类
    TP添加第三方sdk,文件放在ThinkPHP/Library/Org文件夹下可独立创建文件夹
    放在lib/ORG下 比如 A.class.php 放在lib/ORG/Util下 那么引用 import('@.ORG.Util.A');
    Run code
    Cut to clipboard
      文章:Yourphp,thinkphp修改分页代码  发表时间:2017-06-12, 15:34:10  
      展开↯

      #1333

      作者:广西南宁市
      javascript在网页中实现读取剪贴板粘贴截图功能

      这篇文章主要介绍了在网页中实现读取剪贴板粘贴截图功能,即可以把剪贴板的截图Ctrl+V粘贴到网页的一个输入框中,例如QQ截图、旺旺截图或者其它截图软件,需要的朋友可以参考下
      见某网站的输入框支持截屏粘贴的功能,觉得有点意思,于是将代码扒出来分享下。
      可惜,目前仅有高版本的 Chrome 浏览器支持这样直接粘贴,其他浏览器目前为止还无法粘贴( IE11没测试过 ),当然这种增强型的用户体验功能有总比没有好。
      输入框的结构代码:
      <input type="text" id="testInput" />
      Run code
      Cut to clipboard

        为输入框绑定粘贴事件:
        var input = document.getElementById( 'testInput' ); input.addEventListener( 'paste', function( event ){ // dosomething... });
        Run code
        Cut to clipboard

          粘贴事件的 Event 接口对象提供了一个 clipboardData 接口,该接口就保存了系统剪贴板中的数据,如上面所说,目前只有高版本的 Chrome 浏览器能直接访问系统剪贴板的数据。这就给截屏后保存到剪贴板中的图片于网页直接进行交互提供了一个入口。
          这里所说的截屏,就是 QQ 提供的截屏或者系统自带的 PrtScn 键的截屏功能,或者其他第三方软件提供的截屏功能。
          input.addEventListener( 'paste', function( event ){ // 添加到事件对象中的访问系统剪贴板的接口 var clipboardData = event.clipboardData, i = 0, items, item, types; if( clipboardData ){ items = clipboardData.items; if( !items ){ return; } item = items[0]; // 保存在剪贴板中的数据类型 types = clipboardData.types || []; for( ; i < types.length; i++ ){ if( types[i] === 'Files' ){ item = items[i]; break; } } // 判断是否为图片数据 if( item && item.kind === 'file' && item.type.match(/^image\//i) ){ // 读取该图片 imgReader( item ); } } });
          Run code
          Cut to clipboard

            从剪贴板中取到了图片数据,就可以用 FileReader 对其进行读取了。
            var imgReader = function( item ){ var file = item.getAsFile(), reader = new FileReader(); // 读取文件后将其显示在网页中 reader.onload = function( e ){ var img = new Image(); img.src = e.target.result; document.body.appendChild( img ); }; // 读取文件 reader.readAsDataURL( file ); };
            Run code
            Cut to clipboard


              很短的代码就实现了,可以使用以下源码演示
              <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>利用 clipboardData 在网页中实现截屏粘贴的功能</title> <style type="text/css"> #box{ width:200px; height:200px; border:1px solid #ddd; } </style> </head> <body> <h1>利用 clipboardData 在网页中实现截屏粘贴的功能</h1> <hr /> <div><input type="text" id="testInput" placeholder="截屏后粘贴到输入框中" size="30" /></div> <script type="text/javascript"> (function(){ var imgReader = function( item ){ var blob = item.getAsFile(), reader = new FileReader(); reader.onload = function( e ){ var img = new Image(); img.src = e.target.result; document.body.appendChild( img ); }; reader.readAsDataURL( blob ); }; document.getElementById( 'testInput' ).addEventListener( 'paste', function( e ){ var clipboardData = e.clipboardData, i = 0, items, item, types; if( clipboardData ){ items = clipboardData.items; if( !items ){ return; } item = items[0]; types = clipboardData.types || []; for( ; i < types.length; i++ ){ if( types[i] === 'Files' ){ item = items[i]; break; } } if( item && item.kind === 'file' && item.type.match(/^image\//i) ){ imgReader( item ); } } }); })(); </script> </body> </html>
              Run code
              Cut to clipboard
                文章:上传base64图片到七牛云存储  发表时间:2017-06-12, 11:33:11  
                展开↯

                #1334

                作者:广西南宁市
                // box为被拖放的区域 $('body').on('dragover','#contentadddd' , function(event){ var e=event.originalEvent; //box.addEventListener('dragover', function (e) { e.preventDefault(); // 必须阻止默认事件 });//, false
                Run code
                Cut to clipboard
                  文章:上传base64图片到七牛云存储  发表时间:2017-06-12, 11:05:06  
                  展开↯

                  #1335

                  作者:广西南宁市
                  文章:@意见反馈/技术支持/伊网/安企网  发表时间:2017-06-12, 09:04:39  
                  展开↯

                  #1336

                  作者:广西南宁市
                  #,广西南宁市,2017-06-12,09:02:14,
                  文章:@意见反馈/技术支持/伊网/安企网  发表时间:2017-06-12, 09:01:07  
                  展开↯

                  #1337

                  作者:广西南宁市
                  文章:@意见反馈/技术支持/伊网/安企网  发表时间:2017-06-12, 08:59:53  
                  展开↯

                  #1338

                  作者:北京市
                  文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 21:02:34  
                  展开↯

                  #1339

                  作者:北京市
                  文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 21:01:42  
                  展开↯

                  #1340

                  作者:广西南宁市
                  文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 20:02:45  
                  展开↯

                  #1341

                  作者:广西南宁市
                  关于一个事件触发多个响应函数:
                  function addLoadEvent(func) { var oldonload = window.onload; if (typeof window.onload != 'function') {     window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); } } }
                  Run code
                  Cut to clipboard
                    这个函数写得很巧妙。利用匿名函数
                    文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 20:00:18  
                    展开↯

                    #1342

                    作者:广西南宁市
                    先创建一个空的FormData对象,然后使用append()方法向该对象里添加字段,如下:
                    var oMyForm = new FormData(); oMyForm.append("username", "Groucho"); oMyForm.append("accountnum", 123456); // 数字123456被立即转换成字符串"123456" // fileInputElement中已经包含了用户所选择的文件 oMyForm.append("userfile", fileInputElement.files[0]); var oFileBody = "<a id="a"><b id="b">hey!</b></a>"; // Blob对象包含的文件内容 var oBlob = new Blob([oFileBody], { type: "text/xml"}); oMyForm.append("webmasterfile", oBlob); var oReq = new XMLHttpRequest(); oReq.open("POST", "http://foo.com/submitform.php"); oReq.send(oMyForm);
                    Run code
                    Cut to clipboard

                      注: 字段"userfile"和"webmasterfile"的值都包含了一个文件.通过 FormData.append()方法赋给字段"accountnum"的数字被自动转换为字符(字段的值可以是一个Blob对象,一个File对象,或者一个字符串,剩下其他类型的值都会被自动转换成字符串).
                      在该例子中,我们创建了一个名为oMyForm的FormData对象,该对象中包含了名为"username", "accountnum", "userfile" 以及 "webmasterfile"的字段名,然后使用XMLHttpRequest的send()方法把这些数据发送了出去."webmasterfile"字段的值不是一个字符串,还是一个Blob对象.
                      文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:59:22  
                      展开↯

                      #1343

                      作者:广西南宁市
                      js实现拖拽上传图片的实现思路

                      拖拽主要用到两个事件 dragover drop
                      // box为被拖放的区域 box.addEventListener('dragover', function (e) { e.preventDefault(); // 必须阻止默认事件 }, flase); box.addEventListener('drop', function (e) { e.preventDefault(); // 阻止默认事件 var file = e.dataTransfer.files[0]; //获取文件 // code }, false);
                      Run code
                      Cut to clipboard

                        预览,主要是文件转换为base64,或者blob,或者canvas
                        file -> base64
                        // file为前面获得的 var reader = new FileReader(); reader.onload = function(e) { var img = new Image; img.src = this.result; // this.result 为base64 // 加到dom }; reader.readAsDataURL(file);
                        Run code
                        Cut to clipboard

                          file -> blob
                          // file为前面获得的 var url = window.URL.createObjectURL(file); var img = new Image; img.src = url; // 加到dom
                          Run code
                          Cut to clipboard

                            上传 需要用到FormData模拟表单数据 或直接form上传
                            不做处理直接ajax上传
                            var xhr = new XMLHttpRequest, fd = new FormData; xhr.open('POST', 'url', true); // 'url' //可以通过progress事件监听上传进度 xhr.onload = function() { // 上传完成 } // fd.append('file', file); // 'file' xhr.send(fd);
                            Run code
                            Cut to clipboard

                              如果图片上传前要修改,如对图片进行裁剪,旋转等操作(前端),一般是转化为canvas处理。
                              随后根据后台可能把canvas转成base64字符串上传或转成blob对象上传,
                              #,广西南宁市,2017-06-08,19:53:53, https://segmentfault.com/q/1010000002885157
                              #,广西南宁市,2017-06-08,19:55:30, HTML5 本地裁剪图片并上传至服务器
                              #,广西南宁市,2017-06-08,19:57:11, 你真的会使用XMLHttpRequest吗?
                              文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:53:22  
                              展开↯

                              #1344

                              作者:广西南宁市
                              <script> var box=document.getElementById('contentadddd'); function putb64(picurl,pickey,token){ var pic = picurl.substring(22); /*通过base64编码字符流计算文件流大小函数*/ function fileSize(str){ var fileSize; if(str.indexOf('=')>0) { var indexOf=str.indexOf('='); str=str.substring(0,indexOf);//把末尾的’=‘号去掉 } fileSize=parseInt(str.length-(str.length/8)*2); return fileSize; } /*把字符串转换成json*/ function strToJson(str){ var json = eval('(' + str + ')'); return json; } var url = "https://upload.qbox.me/putb64/-1"; //"+fileSize(pic)+"/key/"+pickey; //非华东空间需要根据注意事项 1 修改上传域名 "+fileSize(pic)+"/key/"+pickey var xhr = new XMLHttpRequest(); xhr.onreadystatechange=function(){ if (xhr.readyState==4){ var data=xhr.responseText; //console.log(data); data=strToJson(data); //console.log(data); //data=strToJson(data.key); $('.watermark').hide(); codeanddd('contentadddd','
                              '); $('#myCanvasimgpuppmain').hide(); submitinputtvllsscccc("上传成功!"); //data=JSON.parse(data); } } xhr.open('POST', url, true); xhr.setRequestHeader("Content-Type", "application/octet-stream"); xhr.setRequestHeader("Authorization", "UpToken "+token); xhr.send(pic); } box.addEventListener("paste", function(e) { if (e && e.clipboardData && e.clipboardData.types && e.clipboardData.items.length) { var clipboardData = e.clipboardData, type = clipboardData.types; if (type.indexOf('Files') !== -1) { var item = clipboardData.items[0], reader = new FileReader(); reader.onload = function(event) { var img = document.createElement('img'); img.src = event.target.result; img.onload = function () { var canvas = document.getElementById("myCanvasimgpupp"); var ctx = canvas.getContext('2d'); ctx.drawImage(img, 0, 0, 55, 55); } $('#myCanvasimgpuppmain').show(); $('#submitinputtvllss').text("正在上传.."); //console.log(img.src); $.ajax( { url: '/outblog.php?pastimgvassss=base64', //这里是静态页的地址 type: "GET", //静态页用get方法,否则服务器会抛出405错误 dataType: "json", //cache: false, //async: false, beforeSend: function(){ // Handle the beforeSend event }, success: function(data){ //data=JSON.parse(data); //alert(file); var upToken=data.upToken; var nnaame=data.nnaame; putb64(img.src,data.cccodejj,upToken) } }); //document.body.appendChild(img); } if (item.kind === 'string' && clipboardData.items[1]) { item = clipboardData.items[1]; } reader.readAsDataURL(item.getAsFile()); } } //return false; }) // box为被拖放的区域 box.addEventListener('dragover', function (e) { e.preventDefault(); // 必须阻止默认事件 }, false); box.addEventListener('drop', function (e) { e.preventDefault(); // 阻止默认事件 var file = e.dataTransfer.files[0]; //获取文件 // code upperCase(file); $('#myCanvasimgpuppmain').show(); $('#submitinputtvllss').text("正在上传.."); $.ajax( { url: '/outblog.php', //这里是静态页的地址 type: "GET", //静态页用get方法,否则服务器会抛出405错误 dataType: "json", //cache: false, //async: false, beforeSend: function(){ // Handle the beforeSend event }, success: function(data){ //data=JSON.parse(data); //alert(file); var upToken=data.upToken; var nnaame=data.nnaame; var xhr = new XMLHttpRequest, fd = new FormData; xhr.open('POST', 'https://up.qbox.me', true); // 'url' //可以通过progress事件监听上传进度 xhr.onload = function() { // 上传完成 //alert(nnaame); codeanddd('contentadddd','
                              '); $('#myCanvasimgpuppmain').hide(); submitinputtvllsscccc("上传成功!"); } // fd.append('file', file); // 'file' fd.append('key', nnaame); fd.append('token', upToken); xhr.send(fd); } }); return false; // file为前面获得的 var url = window.URL.createObjectURL(file); var img = new Image; img.src = url; // 加到dom console.log(url); upperCase(file); $('#myCanvasimgpuppmain').show(); }, false); </script>
                              Run code
                              Cut to clipboard
                                文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:49:47  
                                展开↯

                                #1345

                                作者:广西南宁市
                                PHP后端跨域HEADER头
                                header("Access-Control-Allow-Origin: http://a.com"); // 允许a.com发起的跨域请求 //如果需要设置允许所有域名发起的跨域请求,可以使用通配符 * header("Access-Control-Allow-Origin: *"); // 允许任意域名发起的跨域请求 header('Access-Control-Allow-Headers: X-Requested-With,X_Requested_With');
                                Run code
                                Cut to clipboard
                                  文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:47:58  
                                  展开↯

                                  #1346

                                  作者:广西南宁市
                                  DataURL与File,Blob,canvas对象之间的互相转换的Javascript

                                  canvas转换为dataURL (从canvas获取dataURL)
                                  var dataurl = canvas.toDataURL('image/png'); var dataurl2 = canvas.toDataURL('image/jpeg', 0.8);
                                  Run code
                                  Cut to clipboard


                                    File对象转换为dataURL、Blob对象转换为dataURL

                                    File对象也是一个Blob对象,二者的处理相同。
                                    function readBlobAsDataURL(blob, callback) { var a = new FileReader(); a.onload = function(e) {callback(e.target.result);}; a.readAsDataURL(blob); } //example: readBlobAsDataURL(blob, function (dataurl){ console.log(dataurl); }); readBlobAsDataURL(file, function (dataurl){ console.log(dataurl); });
                                    Run code
                                    Cut to clipboard

                                      dataURL转换为Blob对象
                                      function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], {type:mime}); } //test: var blob = dataURLtoBlob('data:text/plain;base64,YWFhYWFhYQ==');
                                      Run code
                                      Cut to clipboard


                                        dataURL图片数据绘制到canvas

                                        先构造Image对象,src为dataURL,图片onload之后绘制到canvas
                                        var img = new Image(); img.onload = function(){ canvas.drawImage(img); }; img.src = dataurl;
                                        Run code
                                        Cut to clipboard


                                          File,Blob的图片文件数据绘制到canvas

                                          还是先转换成一个url,然后构造Image对象,src为dataURL,图片onload之后绘制到canvas

                                          利用上面的 readBlobAsDataURL 函数,由File,Blob对象得到dataURL格式的url,再参考 dataURL图片数据绘制到canvas
                                          readBlobAsDataURL(file, function (dataurl){ var img = new Image(); img.onload = function(){ canvas.drawImage(img); }; img.src = dataurl; });
                                          Run code
                                          Cut to clipboard


                                            不同的方法用于构造不同类型的url (分别是 dataURL, objectURL(blobURL), filesystemURL)。这里不一一介绍,仅以dataURL为例。

                                            filesystemURL不是指本地文件URL的形式(file:///….), 而是格式类似于 filesystem:http://... 的一种URL,支持沙盒文件系统的浏览器支持(目前仅Chrome)支持。

                                            Canvas转换为Blob对象并使用Ajax发送

                                            转换为Blob对象后,可以使用Ajax上传图像文件。

                                            先从canvas获取dataurl, 再将dataurl转换为Blob对象
                                            var dataurl = canvas.toDataURL('image/png'); var blob = dataURLtoBlob(dataurl); //使用ajax发送 var fd = new FormData(); fd.append("image", blob, "image.png"); var xhr = new XMLHttpRequest(); xhr.open('POST', '/server', true); xhr.send(fd);
                                            Run code
                                            Cut to clipboard
                                              文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:47:04  
                                              展开↯

                                              #1347

                                              作者:广西南宁市
                                              HTML5学习之FileReader接口
                                              <script type="text/javascript"> var result=document.getElementById("result"); var file=document.getElementById("file"); //判断浏览器是否支持FileReader接口 if(typeof FileReader == 'undefined'){ result.InnerHTML="<p>你的浏览器不支持FileReader接口!</p>"; //使选择控件不可操作 file.setAttribute("disabled","disabled"); } function readAsDataURL(){ //检验是否为图像文件 var file = document.getElementById("file").files[0]; if(!/image\/\w+/.test(file.type)){ alert("看清楚,这个需要图片!"); return false; } var reader = new FileReader(); //将文件以Data URL形式读入页面 reader.readAsDataURL(file); reader.onload=function(e){ var result=document.getElementById("result"); //显示文件 result.innerHTML='<img src="' + this.result +'" alt="" />'; } } function readAsBinaryString(){ var file = document.getElementById("file").files[0]; var reader = new FileReader(); //将文件以二进制形式读入页面 reader.readAsBinaryString(file); reader.onload=function(f){ var result=document.getElementById("result"); //显示文件 result.innerHTML=this.result; } } function readAsText(){ var file = document.getElementById("file").files[0]; var reader = new FileReader(); //将文件以文本形式读入页面 reader.readAsText(file); reader.onload=function(f){ var result=document.getElementById("result"); //显示文件 result.innerHTML=this.result; } } </script> <p> <label>请选择一个文件:</label> <input type="file" id="file" /> <input type="button" value="读取图像" onclick="readAsDataURL()" /> <input type="button" value="读取二进制数据" onclick="readAsBinaryString()" /> <input type="button" value="读取文本文件" onclick="readAsText()" /> </p> <div id="result" name="result"></div>
                                              Run code
                                              Cut to clipboard
                                                文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:45:25  
                                                展开↯

                                                #1348

                                                作者:广西南宁市
                                                拖曳图片
                                                <div id="box" style="background:red;width:300px;height:300px;"></div> <script> var box=document.getElementById('box'); // box为被拖放的区域 box.addEventListener('dragover', function (e) { e.preventDefault(); // 必须阻止默认事件 }, false); box.addEventListener('drop', function (e) { e.preventDefault(); // 阻止默认事件 var file = e.dataTransfer.files[0]; //获取文件 // code // file为前面获得的 var url = window.URL.createObjectURL(file); var img = new Image; img.src = url; // 加到dom console.log(url); }, false); </script>
                                                Run code
                                                Cut to clipboard
                                                  文章:上传base64图片到七牛云存储  发表时间:2017-06-08, 19:44:02  
                                                  展开↯

                                                  #1349

                                                  作者:广西南宁市
                                                  给一个div绑定两个动画效果
                                                  我所需要的效果是 —— 下拉刷新时的旋转图标,旋转一周由无到有,再继续无限旋转。
                                                  也就是给它绑定两个动画,一是 图标旋转,透明度由0变为1,二是图标无限旋转。

                                                  下面是代码(为了避免图片引入,旋转图标用了其他代替):
                                                  <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <div> <span>></span> </div> </body> <style> /*这些是基础样式*/ div span { display: block; width: 30px; height: 30px; line-height: 28px; text-align: center; margin: 10% auto; border-radius: 50%; font-size: 20px; color: #ffffff; background: #8CCC66; } /*下面是动画样式*/ div span { animation-name:animation1, animation2; /*绑定到选择器的动画名称*/ animation-duration:1s, 1s; /*完成动画所花费的时间*/ animation-timing-function:linear, linear; /*动画的速度曲线*/ animation-delay:0, 1s; /*动画开始之前的延迟*/ animation-iteration-count:1, infinite; /*动画应该播放的次数 infinite是无限循环*/ } @-webkit-keyframes animation1 { 0%{-webkit-transform:rotate(0);opacity: 0;} 50%{-webkit-transform:rotate(180deg);opacity: .3;} 100%{-webkit-transform:rotate(360deg);opacity: 1;} } @keyframes animation1 { 0%{transform:rotate(0);opacity: 0;} 50%{transform:rotate(180deg);opacity: .3;} 100%{transform:rotate(360deg);opacity: 1;} } @-webkit-keyframes animation2 { 0%{-webkit-transform:rotate(0)} 50%{-webkit-transform:rotate(180deg)} 100%{-webkit-transform:rotate(360deg)} } @keyframes animation2 { 0%{transform:rotate(0)} 50%{transform:rotate(180deg)} 100%{transform:rotate(360deg)} } </style> </html>
                                                  Run code
                                                  Cut to clipboard
                                                    文章:常用html、demo代码  发表时间:2017-06-08, 11:42:33  
                                                    展开↯
                                                    你好,残忍屏蔽广告

                                                    确定要清除编辑框内容吗?

                                                    该删除操作将不可恢复。

                                                    删除 取消

                                                    激活Windows

                                                    转到"设置"以激活Windows。