怎么在contenteditable可编辑的div插入图片

本文介绍了一种实现可编辑DIV的方法,同时展示了如何通过更改上传按钮样式为小图标来提升用户体验。文中详细解释了DIV的样式设置及图片上传功能的实现过程。

我在网上搜了一下,然后再根据我自己的改了一下,在此记录。

  • 我的可编辑div
  <div class="send_content" contenteditable="true" id="send_content"></div>
  • 我的上传按钮

这里我的上传按钮改变了样式,变成了小图标,待会我也要记录怎么把上传按钮改变样式 

  <span class="file"><i
                        class="fa fa-picture-o fa-lg" aria-hidden="true"></i>
                    <input type="file" name="" onchange="showPreview(this)">
                </span>

 

  • 我的div文本样式以及图片的样式
.send_content {
    width: 660px;
    height: 130px;
    margin: 40px auto;
    overflow: hidden;
    outline: none;
    box-sizing: border-box;
    font-size: 14px;
    -webkit-background-clip: text;
    background-image: linear-gradient(to right, #778899 0%, #333 100%);
    /*粗细 风格 颜色*/
}
.send_content img{
    max-width: 120px;
    display: block;
}
  • 脚本代码
function showPreview(source) {
    var file = source.files[0];
    if (window.FileReader) {
        var fr = new FileReader();
        console.log(fr);
        var send_content = document.getElementById('send_content');
        fr.onloadend = function (e) {
            send_content.src = e.target.result;
            send_content.focus();
            document.execCommand('InsertImage', false, send_content.src );
        };
        fr.readAsDataURL(file);
    }
}
  • 最后结果

先点击那个图片按钮,然后选择图片,就可以在我下面的可编辑的div显示。

在HTML中,`contenteditable`属性允许元素的内容被用户直接编辑。然而,由于其设计初衷主要是文本输入,原生情况下并不支持直接插入图片。要实现这个功能,通常需要借助JavaScript来扩展编辑区域的功能。 以下是一个简单的示例,利用JavaScript的`insertAdjacentHTML()`方法和`FileReader` API来实现: ```html <!DOCTYPE html> <html lang="en"> <head> <style> .editable-image { border: 1px solid black; padding: 10px; resize: none; } </style> </head> <body> <div contenteditable="true" class="editable-image" id="myEditableArea"></div> <!-- 插入图片按钮 --> <button onclick="insertImage()">Insert Image</button> <script> function insertImage() { document.getElementById('myEditableArea').addEventListener('paste', handlePaste); // 当用户粘贴时触发 function handlePaste(e) { e.preventDefault(); // 阻止浏览器默认行为(防止覆盖已存在的图片) var files = (e.clipboardData || window.clipboardData).items; if (!files || !files.length) return; var file = files[0].getAsFile(); if (!file) return; var reader = new FileReader(); reader.onload = function (event) { var imgHTML = `<img src="${event.target.result}" alt="Uploaded image">`; document.execCommand('insertHTML', false, imgHTML); // 插入HTML }; reader.readAsDataURL(file); } } </script> </body> </html> ``` 在这个例子中,当点击“Insert Image”按钮后,会监听`paste`事件。如果用户从剪贴板粘贴图片,它会被读取并转换为Base64格式的URL,然后插入可编辑区域中。 请注意,这只是一个基本的示例,实际应用可能需要考虑更多情况,如错误处理、用户选择文件的方式(可能是通过文件选择器而非粘贴)、以及兼容性问题等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值