H5标签的contenteditable属性在项目种的使用

news2025/4/27 11:06:03

介绍

contenteditable 是 HTML5 中的新属性。属性值为true 可以编辑元素内容,false 无法编辑元素内容。
简单说: div标签,加上这个属性,就变成可以编辑状态。

<p contenteditable="true">这里可编辑</p>

属性可以开发的功能

案例: 情报板排版功能
高速上情报板,文字都是通过x y坐标定位上去的。后台返回的默认排版,我们可以再次根据实际情况,再次排版。效果如下:
请添加图片描述

代码实现

关键属性使用:

  <span v-if="item.edit" contenteditable>{{ item.text }} </span>
     var selection = getSelection()
                var range = selection.getRangeAt(0);
                var rangeStartOffset = range.startOffset; // 获取光标位置
<template>
    <div class="page-container">
        <h1 contenteditable @keydown="keydown">我是测试文本</h1>
        <!-- {{ item.edit?:contenteditable:'' }} -->
        <div class="infoPublish">
            <span v-for="(item, index) in list" :key="index" :style="{
                'position': 'absolute',
                'left': item.x + 'px',
                'top': item.y + 'px',
                'cursor': item.edit ? '' : 'move'
            }" @dblclick="isEdit(true, index)" @keydown="keydown" :ref="'word' + index">

                <span v-if="item.edit" contenteditable>{{ item.text }} </span>
                <span v-else>{{ item.text }} </span>
            </span>
        </div>

        <h1>我是测试文字{{ list }}</h1>

    </div>
</template>
<script>

export default {

    name: "infoPublish",
    data() {
        return {
            list: [
                { text: "123", x: 0, y: 0, edit: false },
                { text: "小心驾驶", x: 0, y: 50, edit: false },
            ],
            fontSize: 32,//当前编辑板子的字号
            editIndex: 0,
             doing: false,

        }
    },
    methods: {
        isEdit(boole, index) {
            this.list[index].edit = boole;
            this.editIndex = index;
            this.doing = true
        },
        keydown(e) {

            if (e.keyCode == 13) {
                e.preventDefault();

                var selection = getSelection()
                var range = selection.getRangeAt(0);
                var rangeStartOffset = range.startOffset; // 获取光标位置

                let text = this.list[1].text;
                var after_text = text.substring(0, rangeStartOffset);
                var before_text = text.substring(rangeStartOffset, text.length);

                this.list[this.editIndex].text = text.substring(0, rangeStartOffset);//修改原text
                //  创建新text数据
                let old_y = this.list[this.editIndex].y;
                let old_x = this.list[this.editIndex].x;
                let fontSize = this.fontSize;

                this.list.push({ edit: false,text: before_text, x: (old_x + after_text.length) * fontSize + 10, y: old_y })

                console.log("开始位置", old_x, after_text.length)

                selection.removeAllRanges();// 清除选定对象的所有光标对象
                this.list.forEach(i => {
                    i.edit = false
                })
                this.isEdit = false

                return false;
            }else if(e.keyCode == 32){

            } else {
                e.preventDefault();
                return false;
            }
        },

    },


}
</script>

<style lang="less" scoped>
.infoPublish {
    height: 400px;
    width: 400px;
    border: 1px solid red;
    position: relative;
    font-size: 32px;

    &>span {
        border: 1px dotted blue;
        font-family: "block";
        line-height: 1;
        caret-color: red;
        // cursor:move
    }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP Smartforms设计

第八章 SMART FORMS设计 要点列表 概览&#xff1b; Form&#xff08;表格&#xff09;&#xff1b; Smart Styles&#xff08;样式&#xff09;&#xff1b; Text Module&#xff08;文本模块&#xff09;&#xff1b; 使用标准表方式打印&#xff1b; 使用模板方式打印…

C语言基础篇5:指针(二)

接上篇&#xff1a;C语言基础篇5&#xff1a;指针(一) 4 指针作为函数参数 4.1 指针变量作为函数的参数 指针型变量可以作为函数的参数&#xff0c;使用指针作为函数的参数是将函数的参数声明为一个指针&#xff0c;前面提到当数组作为函数的实参时&#xff0c;值传递数组的地址…

java中SPI机制

一&#xff1a;作用 SPI的作用其实就是&#xff0c;在系统内部&#xff0c;定义一个能力接口&#xff0c;该接口可以满足自己的业务需要&#xff0c;比如发送短信&#xff0c;定义一个发送短信的接口&#xff0c;至于用什么方式实现&#xff0c;可以交给短信服务提供商去实现&…

[C/C++]数据结构 堆排序(详细图解)

一:前言 在[C/C]数据结构 堆的详解中,介绍了什么是堆,并且完成了堆的实现和一系列接口,包括向上调整法和向下调整法等,接下来小编介绍一个有点量级的排序方法------堆排序,时间复杂度为O(n*lgn) 二:堆排序详解 2.1 方法介绍 1.首先将待排序数组建为大堆,此时堆顶元素就为数组…

肖sir __数据库练习__001

建表语句&#xff1a; create table student ( id int(4),age int(8),sex int(4),name varchar(20), class int(4), math int(4)) DEFAULT charsetutf8; INSERT into student VALUES(1,25,1,‘zhansan’,1833,90); INSERT into student VALUES(2,25,1,‘lisi’,1833,67); INSER…

Windows安装Docker、自定义安装目录

目录 前言一、Docker安装包下载二、自定义Docker安装路径、设置到其他盘三、安装Docker四、安装后配置1.修改镜像保存路径2.自定义镜像源 五、Docker运行验证1.docker/welcome-to-docker2.MySQL服务 总结 前言 Docker是一种开源的容器化平台&#xff0c;可以让开发者使用容器的…

异步爬虫提速实践-在Scrapy中使用Aiohttp/Trio

在构建爬虫系统时&#xff0c;提高爬虫速度是一个关键问题。而使用异步爬虫技术可以显著提升爬取效率。在本文中&#xff0c;我将与大家分享如何在Scrapy中利用Aiohttp或Trio库实现异步爬取&#xff0c;以加快爬虫的速度。让我们开始吧&#xff01; 1. 安装所需的库 首先&…

MyBatis-Plus及多数据源入门教程

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2、MySQL 8.0.34 框架介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。MyBatis 是一款非常优秀的开源…

企业级应用场景中,LLM 的数据特性剖析及处理对策

编者按&#xff1a;今年以来&#xff0c;大语言模型&#xff08;LLM&#xff09;在消费者(2C)市场崭露头角&#xff0c;同时也吸引了大量企业的关注。但是直接将这些面向消费者的模型引入企业环境&#xff0c;可能会面临一些风险。今天我们为大家带来的这篇文章&#xff0c;作者…

GPTs 初体验 - 1 分钟就能创建一个自己的 ChatGPT? | 京东云技术团队

就在 11.10 号早上&#xff0c;ChatGPT 已经偷摸的把GPTs功能&#xff0c;开放给所有尊贵的 Plus 用户了。 随着这波的功能开放&#xff0c;界面也是改了不少。点击左侧的 Explore 或者左下角的用户处&#xff0c;就可以直接进入新的 GPTs 功能&#xff1a; 这里可以看到我们…

Vue3挂载完毕后,隐藏dom再重新加载组件的方法

组件原本是在PC端使用的&#xff0c;现在需要把组件再封装一次&#xff0c;供app调用&#xff0c;但是在app上会显示tag栏&#xff0c;有占位影响空间&#xff0c;所以需求去掉头部tag&#xff0c;只显示下方组件。 实现方法&#xff0c;以前是直接引用的组件&#xff0c;现在改…

MySQL 前瞻

数据库 是一类软件&#xff0c;这一类软件可以用来“管理数据”&#xff08;对数据进行保存&#xff0c;增删改查 [与数据结构的有什么区别呢&#xff1f;]&#xff09; 数据结构是实现增删改查的具体方式 数据库则是管理数据的软件&#xff0c;实现数据库软件内部就用到了很…

2024重庆大学计算机考研分析

24计算机考研|上岸指南 重庆大学 重庆大学计算机考研招生学院是计算机学院和大数据与软件学院。目前均已出拟录取名单。 重庆大学计算机学院是我国高校最早开展计算机研究的基地之一&#xff0c;1978年和1986年获西南地区首个硕士和博士点&#xff0c;1998年成立计算机学院&a…

主机怎么通过命令行方式向虚拟机传输文件

这是几个月前遇到的问题了&#xff0c;那时候想着要记录下来&#xff0c;但后来忙忘了&#xff0c;这次想起来了&#xff0c;于是记录一下。 之前打靶场的时候需要将netcat-win32-1.12放入虚拟机的/var/www/html下&#xff0c;但是我虚拟机无法上网&#xff0c;也就是说无法直…

一篇搞懂Caffeine

概念 Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库。 缓存和ConcurrentMap有点相似&#xff0c;但还是有所区别。最根本的区别是ConcurrentMap将会持有所有加入到缓存当中的元素&#xff0c;直到它们被从缓存当中手动移除。但是&#xff0c;Caffeine的…

虹科Pico汽车示波器 | 汽车免拆检修 | 2016款东风悦达起亚K5车发动机怠速抖动严重、加速无力

一、故障现象 一辆2016款东风悦达起亚K5车&#xff0c;搭载G4FJ发动机&#xff0c;累计行驶里程约为8.2万km。该车发动机怠速抖动严重、加速无力&#xff0c;同时发动机故障灯异常点亮&#xff0c;为此在其他维修厂更换了所有点火线圈和火花塞&#xff0c;故障依旧&#xff0c;…

JavaScript 的 DOM 知识点有哪些?

文档对象模型&#xff08;Document Object Model&#xff0c;简称 DOM&#xff09;&#xff0c;是一种与平台和语言无关的模型&#xff0c;用来表示 HTML 或 XML 文档。文档对象模型中定义了文档的逻辑结构&#xff0c;以及程序访问和操作文档的方式。 当网页加载时&#xff0…

Linux 项目自动化构建工具:make/makefile

什么是 make make 是一个命令&#xff0c;他会在源文件的当前目录下寻找 makefile 或者 Makefile 文件执行这个文件中的代码。 makefile 文件的编写 我们先来见见猪跑&#xff0c;看看 make 怎么用的&#xff1a; 下面是 makefile 文件的内容&#xff1a; 这是 test.c 中的…

【AD9510 概要总结】A..

目录 特征FEATURES概述 GENERAL DESCRIPTION功能描述 FUNCTIONAL DESCRIPTIONPLL部分REFIN PLL参考输入—REFINVCO/VCXO时钟输入—CLK2PLL基准分频器—RVCO/VCXO 反馈分频器—N (P, A, B)A 和 B 计数器确定 P、A、B 和 R 的值 鉴频鉴相器&#xff08;PFD&#xff09;和电荷泵消…

国联易安:“主动防御”才能保障数据库安全

随着IT与互联网技术高速发展,政府、金融、电信、教育、医疗等各行业的数据成为了组织机构的核心资产。一旦数据被泄漏,不仅会造成严重经济损失&#xff0c;而且会带来极大负面社会影响。 国联易安国联数据库安全防护系统是一款基于数据库协议分析与控制技术的数据库主动防御系统…