33. 本地记事本

news2024/11/16 7:38:33

本地记事本

html部分

<button  class="add">
    <i class="iconfont icon-jiahao"></i>
</button>

css部分

*{
    margin: 0;
    padding: 0;
}
body{
    background-color: #7bdaf3;
    display: flex;
    padding-top: 3rem;
    flex-wrap: wrap;
}
.add{
    position: fixed;
    top: 1rem;
    right: 1rem;
    background-color: #9ec862;
    color: #fff;
    border: none;
    border-radius: 3px;
    padding: 0.5rem 1rem;
    cursor: pointer;
}
.add:active{
    transform: scale(0.98);
}
.note{
    background-color: #fff;
    box-shadow: 0 0 10px 4px rgba(0, 0, 0, 0.1);
    margin: 30px 20px;
    height: 400px;
    width: 400px;
}
.tools{
    background-color: #9ec862;
    display: flex;
    justify-content: flex-end;
    padding: .5rem;
}
.tools button{
    background-color: transparent;
    border: none;
    color: #fff;
    cursor: pointer;font-size: 1rem;
    margin-left: .5rem;
}
textarea{
    outline: none;
    font-size: 1.2rem;
    border: none;
    height: 400px;
    overflow-y: auto;
    overflow-x: hidden;
    padding: 10px;
    display: block;
    width: 95%;
}

js部分

const add = document.querySelector(".add")


init_dom()
add.addEventListener("click", function () {
    const body = document.body;
    body.appendChild(create_note())
})

// 初始化dom    
function init_dom() {
    const body = document.body
    for (let i = 0; i < localStorage.length; i++) {
        const dom = localStorage.getItem(localStorage.key(i));
        if (dom) {
            const div = document.createElement("div");
            div.innerHTML = dom;

            const note = div.children[0];
            const edit = note.querySelector(".edit");
            const del = note.querySelector(".delete");
            const text = note.querySelector("textarea");
            text.innerHTML = text.getAttribute("value");

            body.appendChild(note); // Append the newly created note to the body
            event_dom(edit);
            event_dom(del);
            event_dom(text, 1);
        }
    }
}

// 添加记事本
function create_note() {
    const note = document.createElement("div")
    note.classList.add("note");
    note.dataset.id = Math.floor(Math.random() * 10000000000)

    const tools = document.createElement("div")
    tools.classList.add("tools");

    const edit = document.createElement("button")
    edit.classList.add("edit");
    event_dom(edit)
    edit.dataset.type = "edit"

    const del = document.createElement("button")
    del.classList.add("delete");
    event_dom(del)
    del.dataset.type = "del"

    const i_edit = document.createElement("i")
    i_edit.className = "iconfont icon-bianji"

    const i_del = document.createElement("i")
    i_del.className = "iconfont icon-shanchu"

    const textarea = document.createElement("textarea")
    textarea.setAttribute("readonly", "true")
    event_dom(textarea, 1)

    edit.appendChild(i_edit)
    del.appendChild(i_del)
    tools.appendChild(edit)
    tools.appendChild(del)
    note.appendChild(tools)
    note.appendChild(textarea)
    return note
}

// 给新成的dom绑定事件,已经执行各种操作
function event_dom(dom, index = 0) {
    dom.addEventListener("click", function (e) {
        const { type } = this.dataset
        const note = this.parentNode.parentNode
        if (type == "del") {
            note.remove()
            const local = localStorage.getItem(`dom-${note.dataset.id}`)
            if (local) {
                localStorage.removeItem(`dom-${note.dataset.id}`)
            }

        } else {
            const text = note.children[1]
            text.removeAttribute("readonly")
            text.focus()
        }
    })
    if (index == 1) {
        dom.addEventListener("input", function (e) {
            const note = this.parentNode
            console.log(this);
            console.log(e.target.value);
            this.setAttribute("value", e.target.value)
            console.log(this);
            localStorage.setItem(`dom-${note.dataset.id}`, note.outerHTML)
        })
    }
}

效果

在这里插入图片描述

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

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

相关文章

Vue2基础一、快速入门

零、文章目录 Vue2基础一、快速入门 1、Vue 概念 &#xff08;1&#xff09;为什么学 前端必备技能 岗位多&#xff0c;绝大互联网公司都在使用Vue 提高开发效率 高薪必备技能&#xff08;Vue2Vue3&#xff09; &#xff08;2&#xff09;Vue是什么 **概念&#xff1a;…

第二届“鼎信杯”榜单发布,麒麟信安荣获“优秀技术支撑奖”

由中国电子信息产业发展研究院、北京市海淀区人民政府主办&#xff0c;中国软件评测中心&#xff08;工业和信息化部软件与集成电路促进中心&#xff09;、中关村科学城管委会和北京市国际技术贸易协会承办的“2023 鼎信杯信息技术发展论坛”日前在北京举办。麒麟信安受邀参加主…

和鲸 ModelWhale 与麒麟系统适配认证,打造自主安全、性能可靠的信创 AI 基础软件

发展信创&#xff0c;解决核心技术的自主可控问题&#xff0c;是我国产业升级和数字经济发展过程中的重要命题。信创产业链主要由基础硬件、基础软件、应用软件、信息安全及云计算平台等几部分组成&#xff0c;拥抱信创国产化需要各厂商聚力共创生态&#xff0c;增强自身产品的…

JSONPath提取器案例详解

jsonpath语法 $ 表示根节点&#xff0c;也是所有jsonpath表达式的开始 . 表示获取子节点 .. 表示获取所有符合条件的内容 * 代表所有的元素节点 [] 表示迭代器的标示&#xff08;可以用于处理下标等情况&#xff09; [,] 表示多个结果的选择 ?() 表示过滤操作 表示当前节点一…

【QT】Day1

1. 收到实现登录框 要求&#xff1a; 1、登录窗口更改标题、图标 2、设置固定尺寸、并给定一定的透明度 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //信息调试类&#xff0c;用于打印输出的 #include <QIcon>…

windows命令行

参考:https://blog.csdn.net/u014419722/article/details/130427423 1、 创建文件夹&#xff08;mkdir或md&#xff09; 创建单个文件&#xff1a;mkdir cmd_test 创建二级文件&#xff1a;mkdir cmd_test\456\123 创建多个文件&#xff1a;mkdir cmd_test\000 cmd_test\111 2…

【js】javascript中base64转file、file压缩图片:

文章目录 一、效果图:二、实现代码: 一、效果图: 二、实现代码: /*** base64转file* param {string} urlData base64格式图片* returns */ export function base64ConvertFile(urlData) {if (typeof urlData ! string) {this.$toast("urlData不是字符串")return;}va…

IDEA 模块不加载依旧是灰色 没有变成小蓝色的方块

Settings > Build, Execution, Deployment > Build Tools > Maven > Ignored Files下降对应的模块勾选掉 但通常在Maven的配置中&#xff0c;您会找到一个名为“ignoredFiles”的列表&#xff0c;其中包含被忽略的文件和目录。您可以通过取消选中所需的文件或目录…

腾讯云—自动挂载云盘

腾讯云&#xff0c;稍微麻烦了点。 腾讯云服务器&#xff0c;镜像为opencloudos 8。 ### 1、挂载云盘bash #首先通过以下命令&#xff0c;能够看到新的数据盘&#xff0c;如果不能需要通过腾讯云控制台卸载后&#xff0c;重新挂载&#xff0c;并重启服务器。 fdisk -l#为 /dev…

【iVX】低代码未来发展趋势

未来低代码开发将更加注重用户体验、集成能力、自动化水平和移动支持。同时&#xff0c;应用场景也将进一步扩展&#xff0c;安全与可靠性也将得到更大程度的关注和加强。这些发展方向将进一步推动低代码开发在各个行业和领域的广泛应用和发展。 增强设计能力&#xff1a;低代码…

RFID技术如何赋能化工行业?

化工生产是指在化工行业中&#xff0c;将原材料经过一系列的物理、化学或生物过程转化为最终产品的过程。RFID技术在化工行业中提供了实时跟踪、自动化控制、安全监测和环境管理等方面的帮助&#xff0c;对于提高生产效率、质量控制和安全性具有重要的意义。我们通过典型的化工…

【100天精通python】Day18:python程序异常与调试_常用程序调试方式与技巧,如何将调试代码与正式代码分开

一 程序调试 在Python中&#xff0c;调试是指识别和修复程序中的错误和问题。 调试是程序开发过程中必不可少的一部分&#xff0c;合理利用调试工具和技术可以提高程序开发的效率和质量。Python提供了几种用于调试的工具和技术&#xff0c;帮助开发者找出程序中的bug并进行修复…

论文笔记:Fine-Grained Urban Flow Prediction

2021 WWW 1 intro 细粒度城市流量预测 两个挑战 细粒度数据中观察到的网格间的转移动态使得预测变得更加复杂 需要在全局范围内捕获网格单元之间的空间依赖性单独学习外部因素&#xff08;例如天气、POI、路段信息等&#xff09;对大量网格单元的影响非常具有挑战性——>论…

Spring Batch教程(五)spring boot实现batch功能注解示例:读写文本文件(读取一行数据,针对一行数据进行求和)

Spring batch 系列文章 Spring Batch教程&#xff08;一&#xff09; 简单的介绍以及通过springbatch将xml文件转成txt文件 Spring Batch教程&#xff08;二&#xff09;示例&#xff1a;将txt文件转成xml文件以及读取xml文件内容存储到数据库mysql Spring Batch教程&#xff…

【Spring】Spring 总览

一、简单介绍一下 Spring Spring是一个全面的、企业应用开发的一站式解决方案&#xff0c;贯穿表现层、业务层、持久层&#xff0c;可以轻松和其他框架整合&#xff0c;具有轻量级、控制反转、面向切面、容器等特征。 轻量级 &#xff1a; 空间开销和时间开销都很轻量 控制反…

应用无线鼠标中的2.4GHz无线收发芯片

无线键盘和无线鼠标作为现代办公环境中常见的工具&#xff0c;为我们的工作带来了便利。无线键盘和无线鼠标的工作原理都是基于无线技术实现的&#xff0c;其中常见的是2.4GHz无线技术。让我们一起来详细了解一下它们的工作原理。 无线鼠标的原理非常简单,鼠标部分工作与传统鼠…

运放稳定性分析

基础回顾 电路系统的传函 记基本量为&#xff1a; 电量&#xff08;库伦&#xff09; q q q、电流 i i i、电压 e e e、电阻 R R R、电容 C C C、电感 L L L 电阻 e R i R e_RiR eR​iR&#xff0c;阻抗 R R R 电容 q C e C qCe_C qCeC​&#xff0c;故 e C 1 C q 1 C…

K8s 详解(一) K8s 架构和常用命令

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

芯片制造详解.净洁室的秘密.学习笔记(三)

这是芯片制造系列的第三期跟学up主三圈&#xff0c;这里对其视频内容做了一下整理和归纳&#xff0c;喜欢的可以看原视频。 芯片制造详解03&#xff1a; 洁净室的秘密&#xff5c;为何芯片厂缺人&#xff1f; 芯片制造详解.净洁室的秘密.学习笔记 三 简介一、干净的级别二、芯片…

ClickHouse(四):ClickHouse分布式搭建及其他

进入正文前&#xff0c;感谢宝子们订阅专题、点赞、评论、收藏&#xff01;关注IT贫道&#xff0c;获取高质量博客内容&#xff01; &#x1f3e1;个人主页&#xff1a;含各种IT体系技术,IT贫道_Apache Doris,Kerberos安全认证,大数据OLAP体系技术栈-CSDN博客 &#x1f4cc;订阅…