首页 > 其他分享 >在输入框里直接粘贴图片的实现方式

在输入框里直接粘贴图片的实现方式

时间:2023-12-13 19:44:54浏览次数:30  
标签:insert const target url 输入框 file before 粘贴 图片

有很多 Web 编辑器支持直接复制粘贴图片,记录一下这种效果是怎么实现的

拿到粘贴板上的 image file 对象

document.querySelector('textarea').addEventListener('paste', e => {
  const file = Array.from(e.clipboardData.items)
    .find(v => v.type.includes('image'))
    ?.getAsFile()
})

paste 事件的 ClipboardEvent 对象上可以拿到。这里得到的 file 和 <input type="file" /> 上传选择文件得到的 file 对象一样。

拿到 file 之后就可以做其他操作如上传到服务器,得到 url 链接等

上传图片

通常需要将拿到的图片文件上传到图床或自己的图片服务器上。

function uploadFile(file) {
  return new Promise(resolve => {
    setTimeout(() => resolve(URL.createObjectURL(file)), 1000)
  })
}
const url = await uploadFile(file)

插回输入框

将上传得到的 image url 插入到输入框光标位置

const insert = `![](${url})` // img markdown 语法
const { target } = e
const before = target.value.substr(0, target.selectionStart)
const after = target.value.substr(target.selectionEnd)
target.value = before + insert + after
const cursorPosition = (before + insert).length
target.setSelectionRange(cursorPosition, cursorPosition) // 设置光标位置

完整代码如下:

document.querySelector('textarea').addEventListener('paste', async e => {
  // 拿到粘贴板上的 image file 对象
  const file = Array.from(e.clipboardData.items)
    .find(v => v.type.includes('image'))
    ?.getAsFile()
  // 上传到图床服务器拿到 image web url
  const url = await uploadFile(file)

  // 将 url 插入到输入框光标处
  const insert = `![](${url})` // img markdown 语法
  const { target } = e
  const before = target.value.substr(0, target.selectionStart)
  const after = target.value.substr(target.selectionEnd)
  target.value = before + insert + after
  const cursorPosition = (before + insert).length
  target.setSelectionRange(cursorPosition, cursorPosition)
})
function uploadFile(file) {
  return new Promise(resolve => {
    setTimeout(() => resolve(URL.createObjectURL(file)), 1000)
  })
}

你可以在这里查看运行示例:
https://code.juejin.cn/pen/7309685835798937610

觉得不错,点点小赞:)

 

【出处】:https://www.cnblogs.com/iovec/p/17881991.html

标签:insert,const,target,url,输入框,file,before,粘贴,图片
From: https://www.cnblogs.com/mq0036/p/17899772.html

相关文章

  • 使用富文本编辑器KindEditor上传图片,一直显示:上传中,请稍后... 的解决办法
    问题详细:在使用KindEditor上传图片时,后端已经接收到了,但前端仍在加载如下图: 解决办法:在配置文件中书写以下代码:X_FRAME_OPTIONS='ALLOWALL' 原因:由于Django配置文件中默认将X_FRAME_OPTIONS配置为了DENY——表示该页面不允许在frame中展示,即便是在相同域名......
  • 【Python爬虫】Scrapy框架图片下载_桌面壁纸ZOL(纯案例)
    Spider代码classBizhizolSpider(scrapy.Spider):name="bizhizol"allowed_domains=["zol.com.cn"]start_urls=["https://desk.zol.com.cn/youxi/"]defparse(self,response,**kwargs):#print(response.te......
  • 提取图片名称到excel中
    脚本介绍功能这个Python脚本旨在自动化处理一个特定文件夹中的图片文件名,提取每个文件名中的中文字符,并将这些字符保存到一个Excel表格中。它特别适用于那些需要从大量图片文件中提取文本信息以进行进一步分析或记录的情况。使用场景餐饮业:从包含菜品图片的文件夹中提取菜名,......
  • [粘贴]关于preparedStatement
    作者:wuxinliulei链接:https://www.zhihu.com/question/37043270/answer/83914933来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。这个问题的答案,可以参看这篇文章:http://www.importnew.com/5006.htmlJDBC为什么要使用PreparedStatement而不是S......
  • Word图片显示不全,只显示下面的部分,甚至文字也只显示下部分
    当图片设置文字环绕为嵌入式时,图片会显示不全,有的时候,甚至文字也只显示下半身一、这是正常的情况二、这是显示不全的情况三、如何解决将段落格式中的固定值改成单倍行距或多倍行距即可,或者如果对图片文字环绕方式没有硬性要求的话,直接更改它的文字环绕方式更改行间距......
  • Fluter 网络请求图片403 防盗链处理解决办法
    很多网站都会做防盗链处理我们请求使用flutter请求是403浏览器请求是正常的原因在判定了用户的请求头user-agent处理办法去掉原有的请求头使用浏览器的请求头修改源码assert(key==this);finalUriresolved=Uri.base.resolve(key.url);......
  • css图片等比放大居中|超出部分隐藏
    图片等比放大居中在一些情况下需要保证图片缩略图窗口大小固定,但是图片分辨率比例多种多样,需要在展示固定比例的窗口下展示不同分辨率的图片,还需保证展示的图片不被拉伸变形,保持原有比例的基础上进行等比放大。//外层.img-box{//等比放大图片,超出部分隐藏width:1......
  • python cv2.imread 读取中文路径的图片返回为None的问题
    使用cv2读取图片时,输出图片形状大小时出现报错“'NoneType'objecthasnoattributeshape”,后来排查发现读取图片的返回值image为None,这就说明图片根本就没有被读取。下面图片是问题问题解决后,为了更好的展示,写的代码展示,这是正常的因果关系,找错误排查时是从下往上推。 ......
  • python 统一图片尺寸
     ......
  • 如何给 SAP UI5 应用设置背景图片试读版
    一个朋友询问如何给开发好的SAPUI5应用设置一个背景图片。其实这个需求,按照咱们之前学习的内容,已经可以实现了。假设下面是我事先准备好的一张背景图片。我的需求是想把这张图片,平铺在我的SAPUI5应用里。做出来的效果如下:本需求的实现,利用了本教程之前学习到的知识:SAPUI5应......