用div实现编辑器的功能,可ctrl+c使用ctrl+v粘贴进去

废话不多说,直接上代码吧,自己封装的一个小组件,主要是利用contentEditable="true"属性设置div可编辑啊,可以复制文字,图片什么的,我这边是做了样式的处理,返回值是一个dom字符串。代码如下,不懂的留言:

import React from 'react';
import { connect } from 'react-redux';
import moment from 'moment';
import PropTypes from 'prop-types';
import { fetchutil, util } from 'util';
import { Spin, message } from '@web-public/antd';
import './index.less';
// 上传图片设备对接sourceType
const SZSOURCETYPE = new Map([['jpg', 75], ['jpeg', 75], ['png', 75]]);

class Editor extends React.Component {
  static defaultProps = {
    imgShowWidth: 400, // 输入框中粘贴的图片显示的宽度
    imgShowHeight: 200, // 输入框中粘贴的图片显示的高度
  }
  static propTypes = {
    imgShowWidth: PropTypes.number, // 输入框中粘贴的图片显示的宽度
    imgShowHeight: PropTypes.number, // 输入框中粘贴的图片显示的高度
  }
  constructor(props) {
    super(props);
    const { value = '' } = this.props;
    this.state = {
      uploadUrl: 'web_service/file/pre_upload',
      loading: false,
      msgList: [],
      lastContent: '', // 最终的数据,
      value
    };
  }

  static getDerivedStateFromProps(nextProps, prevState) {
    if (nextProps.value !== prevState.value) {
      return {
        value: nextProps.value
      };
    }
  }

  /**
   * 粘贴 ctrl+v
   * @param {*} event
   */
  handlePaste = async (event) => {
    event.preventDefault();
    const clipboardData = event.clipboardData;
    const textList = [];
    const imageList = [];
    for (let i = 0; i < clipboardData.items.length; i++) {
      if (clipboardData.items[i].type.indexOf('image') !== -1) {
        imageList.push(clipboardData.items[i]);
      } else {
        tex
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Vue 中实现浏览器的 `ctrl+f` 查找功能,可以通过监听键盘事件来实现。 首先,在需要监听键盘事件的组件中,添加 `@keydown.ctrl.f` 监听事件,例如: ```html <template> <div> <input v-model="searchText" placeholder="搜索"> <ul> <li v-for="(item, index) in list" :key="index">{{ item }}</li> </ul> </div> </template> <script> export default { data() { return { searchText: '', list: ['apple', 'banana', 'orange', 'pear'] } }, methods: { handleKeyDown(event) { if (event.ctrlKey && event.keyCode === 70) { // 当按下 ctrl+f 时 event.preventDefault(); // 阻止默认事件 this.$refs.searchInput.focus(); // 让输入框获取焦点 } } }, mounted() { this.$refs.searchInput.addEventListener('keydown', this.handleKeyDown); // 监听键盘事件 }, beforeDestroy() { this.$refs.searchInput.removeEventListener('keydown', this.handleKeyDown); // 移除键盘事件监听 } } </script> ``` 上述代码中,我们在 `mounted` 钩子函数中监听了键盘事件,并在 `beforeDestroy` 钩子函数中移除了键盘事件监听,以防止内存泄漏。 在 `handleKeyDown` 方法中,我们判断是否按下了 `ctrl+f` 快捷键,如果是,则阻止默认事件,并让输入框获取焦点,以便用户可以直接在输入框中输入要查找的内容。 需要注意的是,在监听键盘事件时,我们使用了 `addEventListener` 和 `removeEventListener` 方法来添加和移除事件监听,而不是在模板中直接绑定键盘事件。这是因为在 Vue 中,模板中绑定的事件监听会在组件销毁时自动移除,但是在本例中,我们需要手动移除键盘事件监听,以防止内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值