zoukankan      html  css  js  c++  java
  • 关于 div 的 contenteditable 使用,placeholder 和 复制图片显示并上传,按住 enter+ctrl 内容换行

    当使用文本编辑的时候,首先会使用 textarea ,但是,这个里面不能加入其它标签,也就是不能富文本化。 于是可以使用 contenteditable 

    就是给 div 加上该属性。就变得丰富起来。使用的时候,发现有两个问题。

    1、placeholder 无法正常使用,解决办法,是加上一段css:

    .con:empty:before{
    		    content: attr(placeholder);
    		    color:#bbb;
    		}
    		.con:focus:before{
    		    content:none;
    		}
    

    2、复制,或者用 qq 微信 截图只会,在编辑器内,按 ctr+v 不能将图片复制到编辑器内,解决办法是 监听 事件  paste, 这个事件,目前来说兼容不是很好,但是 谷歌 火狐 等都能正常使用

     下面给出完整代码:

    <!DOCTYPE html>
    <html lang="zh">
    <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>
    	
    	<style type="text/css">
    		*{
    			padding: 0;
    			margin: 0;
    		}
    		div{
    			 800px;
    			height: 600px;
    			border: 1px solid #ccc;
    			margin:  20px auto;
    		}
    		div img{
    			max- 80%;
    		}
    		.con:empty:before{
    		    content: attr(placeholder);
    		    color:#bbb;
    		}
    		.con:focus:before{
    		    content:none;
    		}
    	</style>
    </head>
    <body>
    	<div class="con" contenteditable="true" placeholder="请输入描述内容..."  id="edit"></div>
    </body>
    
    <script type="text/javascript" src="js/jquery.js"></script>
    <script type="text/javascript">
     
    //document.execCommand('InsertImage', false, filePath);
    
    $("#edit").on("paste",function(e){
    	var  d = e.originalEvent;
    	if(d&&d.clipboardData) {
    		var clipboardData = d.clipboardData;
    		//兼容写法,优先取 files
    		if(clipboardData.files && clipboardData.files.length > 0){
    			console.log("-------files----");
    			mapFile(clipboardData.files);
    			return ;
    		}	
    		if (clipboardData.items && clipboardData.items.length > 0) {
    			console.log("------items-----------")
    			mapFile(clipboardData.items);
                return ;
            }
    
    		
    	}
    });
    
    function mapFile(files){
    	for(var i = 0; i < files.length; i++){
    		var c = files[i];
    		if(c.type && c.type.split("/")[0] == "image"){
    			getBase64(files[i]).then(function(ret){
    				document.execCommand("insertImage",false,ret);
    			}).catch(function(ret){});
    		}
    	}
    }
    
    function getBase64(img) {
    	return new Promise(function(resolve,reject){
    		  const reader = new FileReader();
    		  reader.addEventListener('load', () =>{resolve(reader.result)});
    		  reader.readAsDataURL(img);
    	})
    
    }
    
    	
    
    </script>
    </html>
    

      

     效果图

     3、当 contenteditable 作为聊天输入框的时候,就需要按住 enter + ctrl 换行, 按 enter 发送消息

      

    $("#textarea").keydown(function($event){
            	 var keycode = window.event ? $event.keyCode : $event.which;
            	   var evt = $event || window.event;
             	
                if (keycode == 13 && !(evt.ctrlKey)) {
                   
                    $event.preventDefault();
                    return false;
                }
                // ctrl+回车-->换行
                if (evt.ctrlKey && evt.keyCode == 13) {
                   if (window.getSelection) {
    				      var selection = window.getSelection(),
    				      range = selection.getRangeAt(0),
    				      br = document.createElement("br"),
    				      textNode = document.createTextNode("u00a0"); //Passing " " directly will not end up being shown correctly
    				      range.deleteContents();//required or not?
    				      range.insertNode(br);
    				      range.collapse(false);
    				      range.insertNode(textNode);
    				      range.selectNodeContents(textNode);
    				      selection.removeAllRanges();
    				      selection.addRange(range);
    				      document.execCommand("delete");
    				      return false;
    				  }
                    return false;
                }
    
            });
    

      

  • 相关阅读:
    Asp.net button防止点击多次数据提交
    Asp.net button防止点击多次数据提交
    Asp.net button防止点击多次数据提交
    被投资人坑的大学生创业者
    分析了3200家创业公司
    移动互联网4种引流思维:免费思维、跨界思维、平台思维、金融思维
    腾讯入局、估值超10亿美元,“野路子”瑞幸的三大增长法则
    95后女生月入8万,竟然“玩着玩着”就赚到钱
    95后中介年入百万:“伪焦虑”是你人生最大的骗局
    一家靠收智商税盈利的公司,卖了340亿
  • 原文地址:https://www.cnblogs.com/muamaker/p/10270824.html
Copyright © 2011-2022 走看看