html备忘录

news2024/11/24 11:05:21

备忘录

 网站收藏数据:

网站收藏.js

const webLinks = [
    { title: "智能翻译", src: "https://fanyi.baidu.com" },
    { title: "哔哩哔哩", src: "https://www.bilibili.com" },
    { title: "百度一下,你就知道", src: "https://www.baidu.com" },
    { title: "菜鸟教程", src: "https://www.runoob.com/" },
    { title: "Electron中文网", src: "https://www.electronjs.org/zh/docs/latest/" },
    { title: "制作ico图标", src: "https://www.bitbug.net" },
    { title: "Element组件", src: "https://element-plus.org/zh-CN/" },
    { title: "原神大地图", src: "https://act.mihoyo.com/ys/app/interactive-map/index.html?bbs_presentation_style=no_header&lang=zh-cn&utm_source=bbs&utm_medium=mys&utm_campaign=pcicon&_markerFps=24#/map/2?shown_types=NaN,-1084,508,2&center=2008.50,-1084.00&zoom=-3.00" },
    { title: "vue.js", src: "https://cn.vuejs.org/" },
    { title: "w3schools教程", src: "https://www.w3ccoo.com/" },
    { title: "现代JS教程", src: "https://zh.javascript.info/" },
    { title: "CSS3D字体", src: "https://www.dedexuexi.com/tool/3D/" },
    { title: "MDN网络文档", src: "https://developer.mozilla.org/zh-CN/" },
    { title: "UI组件", src: "https://uiverse.io/switches" },
    { title: "IconFont图标", src: "https://www.iconfont.cn/" },
    { title: "vue图标", src: "https://vue-icons.kalimah-apps.com/" },
    { title: "GitHub", src: "https://github.com" },
    { title: "江下科技", src: "https://www.onlinedo.cn/" },
    { title: "CSS可视化", src: "https://css.bqrdh.com/" },
];
const localLinks = [
    { title: "myLogs备忘录", src: "file:///D:/web/html备忘录/html/myLogs备忘录.html" },
    { title: "简单的计算器", src: "file:///D:/web/html备忘录/html/简单的计算器.html" },
    { title: "html表格", src: "file:///D:/web/html备忘录/html/html表格.html" },
    { title: "js生成随机数", src: "file:///D:/web/html备忘录/html/js生成随机数.html" },
    { title: "html5代码账号密码备忘录样本", src: "file:///D:/web/html备忘录/html/html5代码账号密码备忘录样本.html" },
    { title: "特别的时钟特别的倒计时", src: "file:///D:/web/html备忘录/html/特别的时钟特别的倒计时.html" },
    { title: "查查看全部localStorage数据", src: "file:///D:/web/html备忘录/html/真/查看全部localStorage数据.html" },
    { title: "原神角色数据列表.html", src: "D:/data/原神/原神角色数据列表.html" },
];
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>测试版备忘录首页</title>
    <!-- 修改数据器引入 highlight.js 的 CSS 文件 -->
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/styles/default.min.css">
    <!-- <link rel="stylesheet" href="style.css"> -->
    <style>
        /* 设置全局样式 */
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            user-select: none;
            body {
                background: #0b1b2c;
            }
            input,
            button {
                color: #d6d301;
                text-shadow: 1px 1px 1px #100000;
                font-weight: bold;
                cursor: pointer;
            }
            li {
                list-style: none;
            }
        }
        /* 设置全局样式 结束*/
        /* <!-- -------------------------分割线---------------------------------------- --> */
        /* 头部区域header  */
        header {
            width: 100vw;
            height: 40px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            background-color: #cbcbcb;
            &::before {
                content: "";
                background-color: #cbcbcb;
                width: 15px;
                height: 100%;
                position: fixed;
                right: 1px;
                top: 40px;
                z-index: 110;
            }
            /* logo */
            figure.logo {
                width: 262px;
                height: 50px;
                /* 缩小 */
                transform: scale(0.8);
                margin-top: 2px;
                margin-left: -15px;
                border-radius: 50%;
                background: #f30303;
                box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6),
                    inset -4px -4px 5px rgba(0, 0, 0, 0.6);
                z-index: 99;
                figcaption {
                    background: hsl(0, 0%, 0%);
                    background-clip: text;
                    -webkit-background-clip: text;
                    -webkit-text-fill-color: transparent;
                    font-weight: bold;
                    box-shadow: inset 4px 4px 4px rgba(255, 255, 255, 0.6), inset -4px -4px 5px rgba(0, 0, 0, 0.6);
                    letter-spacing: -3px;
                    line-height: 45px;
                    border-radius: 50%;
                    font-size: 40px;
                    width: 152px;
                }
                .my_name1 {
                    text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.726);
                    clip-path: polygon(0% 0%, 100% 0%, 100% 50%, 0% 50%);
                    transform: translate(35%, 0%);
                }
                .my_name2 {
                    text-shadow: 1px 1px 1px hsla(160, 100%, 37%, 0.555);
                    clip-path: polygon(0% 50%, 100% 50%, 100% 100%, 0% 100%);
                    transform: translate(35%, -93%);
                }
                img {
                    width: 60px;
                    height: 35px;
                    border-radius: 50%;
                    transition: transform 0.3s ease;
                    position: absolute;
                    &:hover {
                        transform: scale(1.3);
                        filter: drop-shadow(0 0 0.3em #ff0202);
                    }
                }
                .kong {
                    margin-top: 7px;
                    margin-left: 200px;
                }
                .ying {
                    top: 7px;
                    margin-left: 2px;
                }
            }
            /* 时间 */
            #dateTime1 {
                background: -webkit-linear-gradient(315deg, #e1ff00 50%, #ff0000);
                background-clip: text;
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
                font-size: 1.5rem;
                font-weight: 900;
                text-shadow: 2px -1px 8px rgba(250, 80, 193, 0.323);
                sub {
                    -webkit-text-fill-color: #cfd601;
                    text-shadow: 1px 1px 1px #100000;
                    font-size: 1rem;
                }
            }
            #dateTime2 {
                transform: translate(40%, 80%);
                position: fixed;
                display: flex;
                flex-direction: column;
                align-items: center;
                background: -webkit-linear-gradient(315deg, #e1ff00 50%, #ff0000);
                background-clip: text;
                -webkit-background-clip: text;
                -webkit-text-fill-color: transparent;
                font-size: 10rem;
                font-weight: 900;
                text-shadow: 2px -1px 8px rgba(250, 80, 193, 0.323);
                sub {
                    -webkit-text-fill-color: #cfd601;
                    text-shadow: 1px 1px 1px #100000;
                    font-size: 5rem;
                }
            }
            /* 倒计时 */
            #countdownElement {
                font-size: 1.3rem;
                border-radius: 3px;
                /* background-color: #f30303; */
                /* border: none; */
                padding: 3px;
            }
            #dialogCountdownElement {
                transform: translate(180%, 80%);
                z-index: 999;
            }
            #dialogCountdownElement::backdrop {
                backdrop-filter: blur(2px);
            }
            /* 显示所有复选框按钮 */
            #showCheckboxesButton {
                font-size: 1.5rem;
                border-radius: 3px;
                /* background-color: #f30303; */
                /* border: none; */
                /* padding: 3px; */
                .countdown {
                    color: #f30303;
                    background-color: #f3eb03;
                    padding: 3px;
                }
            }
            /* 全屏还原关闭按钮 */
            menu {
                display: flex;
                button {
                    background: none;
                    border: none;
                }
                img {
                    width: 35px;
                    margin-top: 5px;
                    margin-right: 5px;
                    cursor: pointer;
                    &:hover {
                        transform: scale(1.2);
                        padding: 5px;
                        background: #ffd000;
                    }
                }
                button:nth-child(2) {
                    display: none;
                    /* 放大镜效果 */
                    transform: scale(1.16);
                }
            }
        }
        /* 头部区域header 结束 */
        /* <!-- -------------------------分割线---------------------------------------- --> */
        /* 中间区域main样式 */
        main {
            /* z-index:10; */
            width: 100vw;
            height: 96vh;
            position: absolute;
            top: 4%;
            display: flex;
            justify-content: center;
            /* <!-- -------------------------分割线---------------------------------------- --> */
            /* 左侧导航栏 */
            aside.aside_left {
                width: 6vw;
                height: 96vh;
                position: relative;
                section {
                    width: 100%;
                    height: 98%;
                    position: relative;
                    overflow: hidden;
                    display: flex;
                    flex-direction: column;
                    justify-content: space-evenly;
                    &::before {
                        content: "";
                        width: 15px;
                        height: 100%;
                        position: absolute;
                        z-index: 120;
                        background-color: #cbcbcb;
                    }
                    article {
                        height: calc(100% / 3.5);
                        width: 320%;
                        position: relative;
                        z-index: 100;
                        transform: translateX(-70%);
                        transition: transform .5s ease-in-out;
                        button {
                            width: 35%;
                            height: 100%;
                            font: 800 80px '';
                            background-color: #cbcbcb;
                            border: none;
                            transition: background-color .5s ease-in-out;
                            box-shadow: 0 0 10px rgb(200, 255, 3);
                            color: rgb(70, 100, 180);
                            &:hover {
                                cursor: pointer;
                            }
                        }
                        p {
                            position: absolute;
                            /* 使用渐变背景*/
                            /* background: -webkit-linear-gradient(315deg, #42d392 25%, #647eff); */
                            /*将背景剪切成文字的形状*/
                            background-clip: text;
                            -webkit-background-clip: text;
                            /*文字颜色设为透明,使文字与背景融为一体*/
                            -webkit-text-fill-color: transparent;
                            font-size: 90px;
                            font-weight: 900;
                            right: -15px;
                            /* 文本竖排 */
                            writing-mode: vertical-rl;
                            top: calc(50% - 100px);
                            text-shadow: 2px -1px 8px rgba(250, 80, 193, 0.323);
                        }
                    }
                    article.active {
                        transform: translateX(0);
                    }
                    button.active {
                        color: #feee02d7;
                    }
                }
            }
            /* 左侧导航栏 结束 */
            /* <!-- -------------------------分割线---------------------------------------- --> */
            /* 滑动栏 */
            #bar {
                position: absolute;
                left: 6vw;
                height: 98%;
                width: 2px;
                z-index: 99;
                /* background-color: rgb(255, 249, 249); */
                p {
                    position: absolute;
                    height: calc(100% / 4);
                    width: 10px;
                    top: 0px;
                    left: -1.2px;
                    background: rgb(250, 4, 168);
                    transition: transform .5s ease-in-out;
                    box-shadow:
                        inset 3px 4px 5px rgba(255, 255, 255, 0.6),
                        inset -3px -4px 5px rgba(0, 0, 0, 0.6);
                    border-radius: 10px;
                    &::before {
                        content: "";
                        position: absolute;
                        height: calc(100% / 1);
                        width: 10px;
                        left: -1px;
                        background: rgb(250, 4, 4);
                        transition: transform .5s ease-in-out;
                        border-radius: 10px;
                        box-shadow: 0 0 10px rgb(200, 255, 3);
                    }
                }
            }
            /* 滑动栏 结束*/
            /* <!-- -------------------------分割线---------------------------------------- --> */
            /* 分页设置 */
            #card-section {
                height: 100%;
                width: 90%;
                overflow: hidden;
            }
            /* 分页设置  结束*/
            /* 中间留言按钮区 */
            table {
                width: 86vw;
                margin: 1px 2px;
                box-shadow: 0 0 10px rgb(200, 255, 3);
                .titleBtn {
                    display: flex;
                    text-align: center;
                    td {
                        height: 24px;
                    }
                    .displayBtn {
                        color: #67C23A;
                        background: #0bb811c9;
                        text-shadow: 1px 1px 1px rgb(0, 0, 0);
                        width: 30vw;
                        cursor: pointer;
                        font-weight: bold;
                        &:hover {
                            background-color: #f3d303;
                            color: #e6a23c;
                        }
                    }
                    marquee {
                        background: linear-gradient(to right, #4caf4fed, #dc0000cf);
                        color: #f3d303;
                        margin: 0;
                        padding: 0;
                        width: 26vw;
                        height: 24px;
                    }
                    /* 删除按钮 */
                    .deleteBtn {
                        color: #f3d303;
                        text-shadow: 1px 1px 1px rgb(0, 0, 0);
                        background: #ff0000;
                        font-weight: bold;
                        cursor: pointer;
                        width: 30vw;
                        &:hover {
                            background-color: #f3d303;
                            color: #ff0505;
                        }
                    }
                }
            }
            /* <!-- -------------------------分割线---------------------------------------- --> */
            /* 隐藏的输入框*/
            .myDialog {
                position: fixed;
                top: 6vw;
                left: 10vw;
                background: #2c3e50;
                box-shadow: 0 0 10px rgba(255, 254, 254, 0.5);
                border-radius: 8px;
                border: 0;
                z-index: 999;
                opacity: 0.9;
                .dialog-form {
                    box-shadow: 0 0 1px rgba(255, 254, 254, 0.5);
                    display: flex;
                    justify-content: space-between;
                    padding: 5px;
                    cursor: move;
                    h2 {
                        color: #f85f5faf;
                        text-shadow: 1px 1px 1px #030303;
                    }
                    /* 关闭按钮 */
                    button {
                        background: #ff000004;
                        border: none;
                        font-size: 30px;
                        /* 放大镜效果 */
                        transform: scale(1.6);
                        margin: 0 5px;
                        width: 30px;
                        height: 28px;
                        &:hover {
                            background-color: #f30303;
                            border-top-right-radius: 5px;
                        }
                    }
                }
                .textarea-form {
                    background-color: #144756;
                    /* 修改数据器按钮 */
                    #readFolder {
                        font-size: 18px;
                        color: #67c23a;
                        text-shadow: 1px 1px 1px #070707;
                        cursor: pointer;
                    }
                    /* 编辑文本按钮 */
                    #toolbar {
                        margin: 0 5px 5px 5px;
                        button {
                            font-size: 18px;
                            background-color: hsla(160, 100%, 37%, 0.63);
                            border: 1PX solid #909399;
                            padding: 1PX;
                            border-radius: 2PX;
                        }
                        /* 编辑文本输入框 */
                        #editor {
                            background-color: #909399;
                            text-shadow: 1px 1px 1px #0a0000;
                            margin: 5px;
                            padding: 10px;
                            border-radius: 5px;
                            /* 最大高度 */
                            max-height: 500px;
                            /* 滚动条 */
                            overflow-y: auto;
                        }
                    }
                    input[type="file"] {
                        box-shadow: 0 0 2px rgba(253, 3, 3, 0.991);
                        margin: 5px;
                    }
                    sub {
                        color: #67C23A;
                        text-shadow: 1px 1px 1px #0a0000;
                        user-select: text;
                    }
                    section {
                        display: flex;
                        input,
                        button {
                            color: #fffcfc;
                            text-shadow: 1px 1px 1px #000;
                            background: #0bb81186;
                            /* 文本竖排 */
                            writing-mode: vertical-rl;
                            /* 文字间距 */
                            letter-spacing: 20px;
                            font-size: 25px;
                            padding-right: 5px;
                        }
                        textarea {
                            background: #0b1b2c;
                            color: hsla(160, 100%, 37%, 0.63);
                            text-shadow: 1px 1px 1px #0a0000;
                            /* background: #144756bd; */
                            font-size: 1.2rem;
                            &::placeholder {
                                text-align: center;
                                color: #67C23A;
                                text-shadow: 1px 1px 1px #0a0000;
                            }
                        }
                    }
                }
            }
            /* 隐藏的输入框  结束 */
            /* <!-- -------------------------分割线---------------------------------------- --> */
            /* 留言内容布局 */
            output {
                opacity: 0.8;
                border: 2px solid rgb(134, 133, 133);
                background-color: #144756;
                width: 85vw;
                height: 91vh;
                margin-left: 10px;
                border-radius: 10px;
                display: flex;
                align-content: flex-start;
                font-size: 20px;
                flex-wrap: wrap;
                overflow-x: hidden;
                box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6), inset 2px 2px 3px rgba(0, 0, 0, 0.6);
                /* 留言内容布局  结束*/
                /* <!-- -------------------------分割线---------------------------------------- --> */
                /* 留言内容字体样式 */
                .Success {
                    input[type="checkbox"] {
                        display: none;
                    }
                    .Message {
                        color: #67c23a;
                        text-shadow: 1px 1px 1px #000;
                        margin: 10px;
                        border-radius: 5px;
                        text-align: center;
                        user-select: text;
                        * {
                            user-select: text;
                        }
                        &:hover {
                            background-color: rgb(191, 210, 255);
                            color: rgb(255, 250, 250);
                            text-shadow: 1px 1px 1px #030303;
                            box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6), inset 2px 2px 3px rgba(0, 0, 0, 0.6);
                        }
                    }
                    pre:hover {
                        background-color: rgb(191, 210, 255);
                        color: rgb(255, 250, 250);
                        text-shadow: 1px 1px 1px #030303;
                        box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6), inset 2px 2px 3px rgba(0, 0, 0, 0.6);
                    }
                    .href {
                        box-shadow: 1px 1px 2px 2px rgba(255, 251, 251, 0.5);
                        padding: 2px;
                        border-radius: 3px;
                    }
                    .finish {
                        background-color: rgb(191, 210, 255);
                        color: rgb(255, 250, 250);
                        text-shadow: 1px 1px 1px #030303;
                        box-shadow: inset -2px -2px 3px rgba(255, 255, 255, 0.6), inset 2px 2px 3px rgba(0, 0, 0, 0.6);
                        /* 删除线 */
                        text-decoration: line-through;
                        text-decoration-color: #c23a3a;
                        text-decoration-thickness: 2px;
                    }
                    a {
                        text-decoration: none;
                        color: #ebf704;
                    }
                }
                /* <!-- -------------------------分割线---------------------------------------- --> */
                /* 修改数据器样式  开始*/
                #addReadFolderArea {
                    margin-top: 0px;
                    margin-left: 110px;
                    #addReadFolder {
                        display: flex;
                        /* 保存按钮 */
                        #fileSave {
                            color: #e6a23c;
                        }
                        /* 关闭按钮 */
                        .cancel-button {
                            color: #f56c6c;
                        }
                    }
                    /* 修改内容区 */
                    #fileContent {
                        white-space: pre-wrap;
                        border: 1px solid #ccc;
                        padding: 5px;
                        height: 865px;
                        overflow: auto;
                        /* 添加此行 */
                    }
                }
                /* 修改数据器样式  结束*/
                .delete-button {
                    margin-left: 10px;
                    cursor: pointer;
                    background-color: red;
                    color: white;
                    border: none;
                    padding: 5px;
                    border-radius: 3px;
                }
            }
            /* 留言内容字体样式 结束 */
            /* <!-- -------------------------分割线---------------------------------------- --> */
            /* 中间留言区  结束*/
            /* 右侧边栏网站收藏 */
            aside.aside_right {
                color: #ffffff;
                flex-wrap: wrap;
                overflow-x: hidden;
                width: 8vw;
                li {
                    box-shadow: 1px 1px 2px 2px rgba(255, 251, 251, 0.5);
                    background-color: #f9f9f90c;
                    margin: 5px;
                    padding: 2px;
                    border-radius: 3px;
                    cursor: pointer;
                    &:hover {
                        background-color: #f3d303;
                    }
                    a {
                        font-size: 18px;
                        color: hsla(160, 100%, 37%, 1);
                        text-shadow: 1px 1px 1px #100000;
                        /* 去掉下划线 */
                        text-decoration: none;
                        &:hover {
                            color: #f85f5faf;
                            display: block;
                            transform: scale(1.2);
                            /* 文本居中 */
                            text-align: center;
                        }
                    }
                }
            }
            /* 右侧边栏网站收藏 结束*/
        }
        /* 中间区域main样式 结束 */
        /* <!-- -------------------------分割线---------------------------------------- --> */
        /* 底部footer样式 */
        footer {
            background-color: #cbcbcb;
            width: 100vw;
            height: 20px;
            position: fixed;
            bottom: 0;
            left: 0;
            text-align: center;
            user-select: text;
            a {
                color: #d6d301;
                text-shadow: 1px 1px 1px #100000;
                font-weight: bold;
                cursor: pointer;
            }
        }
        /* 底部footer样式 结束 */
    </style>
</head>
<body>
    <!-- 头部区域header -->
    <header>
        <!-- logo -->
        <figure class="logo">
            <a href="https://blog.csdn.net/lulei5153?spm=1011.2415.3001.5343" title="与妖为邻CSDN博客" target="_blank">
                <img class="kong" src="file:///D:/img/icon.ico" alt="与妖为邻">
            </a>
            <figcaption class="my_name1">与妖为邻</figcaption>
            <figcaption class="my_name2">与妖为邻</figcaption>
            <a href="file:///D:/web/html%E9%A6%96%E9%A1%B5/%E5%A4%87%E5%BF%98%E5%BD%95.html" class="home_page"
                title="首页" target="_blank">
                <img class="ying" src="file:///D:/img/ying.png" alt="与妖为邻">
            </a>
        </figure>
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 第一组时间 -->
        <time datetime="2024-07-10" title="2024-07-10" id="dateTime1">2024-07-10</time>
        <!-- 第二组时间 -->
        <time datetime="2024-07-10" title="2024-07-10" id="dateTime2">2024-07-10</time>
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 倒计时 -->
        <button onclick="dialogCountdownElement.showModal()" id="countdownElement">倒计时</button>
        <dialog id="dialogCountdownElement">
            <form method="dialog">
                <div>
                    <label for="message">更改提示信息:</label>
                    <input type="text" id="message" value="距离2024年国庆节还有:">
                </div>
                <div>
                    <label for="targetDate">更改目标日期:</label>
                    <input type="date" id="targetDate">
                </div>
                <button type="submit" style="display: block; margin: 5px auto;">关闭</button>
            </form>
            <p>2025主要节日时间表</p>
            <ul>
                <li>元旦:2025年1月1日</li>
                <li>春节:2025年2月12日</li>
                <li>清明节:2025年4月4日</li>
                <li>劳动节:2025年5月1日</li>
                <li>端午节:2025年6月2日</li>
                <li>中秋节:2025年9月21日</li>
                <li>国庆节:2025年10月1日</li>
            </ul>
        </dialog>
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 天气 -->
        <iframe class="tianqi" frameborder="0" width="280" height="36" scrolling="no" hspace="0"
            src="https://i.tianqi.com/?c=code&id=99">
        </iframe>
        <!-- -------------------------分割线---------------------------------------- -->
        <button id="showCheckboxesButton">显示所有复选框10秒后自动隐藏</button>
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 全屏还原关闭按钮 -->
        <menu>
            <button class="fullScreen" type="button"><img src="file:///D:/img/全屏.svg" alt="全屏"
                    onclick="fullScreen()"></button>
            <button class="exitFullScreen" type="button"><img src="file:///D:/img/还原.svg" alt="还原"
                    onclick="exitFullScreen()"></button>
            <button type="button"><img src="file:///D:/img/关闭.svg" alt="关闭" onclick="closeAll()"> </button>
        </menu>
    </header>
    <!-- 头部区域header 结束 -->
    <!-- -------------------------分割线---------------------------------------- -->
    <!-- 中间区域 main -->
    <main>
        <!-- 左侧导航栏 -->
        <aside class="aside_left">
            <section>
                <article class="active">
                    <button onclick="slideTo(1)" class="active">首页
                        <p>首页</p>
                    </button>
                </article>
                <article>
                    <button onclick="slideTo(2)">英语
                        <p>英语</p>
                    </button>
                </article>
                <article>
                    <button onclick="slideTo(3)">音乐
                        <p>音乐</p>
                    </button>
                </article>
                <article>
                    <button onclick="slideTo(4)">项目
                        <p>项目</p>
                    </button>
                </article>
            </section>
        </aside>
        <!-- 左侧导航栏  结束-->
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 滑动栏 -->
        <article id="bar">
            <p></p>
        </article>
        <!-- 滑动栏 结束-->
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 中间留言区 -->
        <section id="card-section">
            <!-- -------------------------分割线---------------------------------------- -->
            <!-- 第一页:首页 -->
            <article id="card1">
                <table>
                    <tr class="titleBtn">
                        <td class="displayBtn" onclick="myDialog.show()">编辑首页页面按钮
                        </td>
                        <td>
                            <marquee behavior="alternate" direction="right">首页杂记 </marquee>
                        </td>
                        <td id="delete1" class="deleteBtn">删除首页页面按钮
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <!-- <dialog> 元素的 open 属性设置为 true,表示对话框在页面加载时默认打开 -->
                            <!-- <dialog id="myDialog" class="myDialog" open> -->
                            <dialog id="myDialog" class="myDialog">
                                <article class="dialog-form" id="Drag">
                                    <h2>可修改本地文本文件的简陋版文本编辑器、浏览器首页、记事本</h2>
                                    <button type="button" onclick="myDialog.close()">&times</button>
                                </article>
                                <form class="textarea-form">
                                    <input type="file" name="file1"
                                        accept="text/plain, text/css, text/html, text/javascript, text/markdown" />
                                    <sub>&lt;a
                                        class="href" href=" " target="_blank"&gt;&lt;/a&gt; &nbsp;&nbsp;&nbsp;&nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;lt;
                                        &amp;gt;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; <span
                                            style="color: red;user-select: text;">^\s*(?=\r?$)\n</span>
                                    </sub>
                                    <!-- 修改数据器按钮 -->
                                    <button type="button" id="readFolder"
                                        onclick="addReadFolderArea.show()">修改数据器</button>
                                    <!-- 编辑文本 -->
                                    <menu id="toolbar">
                                        <button type="button" id="btnBold">加粗</button>
                                        <button type="button" id="btnItalic">斜体</button>
                                        <button type="button" id="btnUnderline">下划线</button>
                                        <button type="button" id="btnStrikeThrough">删除线</button>
                                        <button type="button" id="btnInsertOrderedList">有序列表</button>
                                        <button type="button" id="btnInsertUnorderedList">无序列表</button>
                                        <button type="button" id="btnJustifyLeft">左对齐</button>
                                        <button type="button" id="btnJustifyCenter">居中对齐</button>
                                        <button type="button" id="btnJustifyRight">右对齐</button>
                                        <button type="button" id="btnJustifyFull">两端对齐</button>
                                        <button type="button" id="btnCreateLink">创建链接</button>
                                        <button type="button" id="btnUnlink">取消链接</button>
                                        <button type="button" id="btnInsertImage">插入图片</button>
                                        <button type="button" id="btnForeColor">文字颜色</button>
                                        <button type="button" id="btnBackground">背景颜色</button>
                                        <button type="button" id="btnUndo">撤销</button>
                                        <button type="button" id="btnRedo">重做</button>
                                        <button type="button" id="btnExportHtml">导出HTML</button>
                                        <button type="button" id="btnReset">重置</button>
                                        <p id="editor" contenteditable="true" data-placeholder="在此输入需要编辑的文本"></p>
                                    </menu>
                                    <section>
                                        <input type="reset" value="重置">
                                        <textarea id="textareaHTML" class="textarea1" name="textarea1" rows="18"
                                            cols="125"
                                            placeholder="选择txt、js、css或html文件,文件内容会被自动读取,简陋版编辑器按钮是javascript操作文件内容,修改文件内容后,请快捷键ctrl+s保存"></textarea>
                                        <button type="button" class="abb-text1">添加</button>
                                    </section>
                                </form>
                            </dialog>
                            <output id="memo1">
                                <!-- 修改数据器修改内容区 -->
                                <dialog id="addReadFolderArea"></dialog>
                            </output>
                        </td>
                    </tr>
                </table>
            </article>
            <!-- 第一页:首页  结束-->
            <!-- -------------------------分割线---------------------------------------- -->
            <!-- 第二页:英语 -->
            <article id="card2">
                <table>
                    <tr class="titleBtn">
                        <td class="displayBtn" onclick="myDialog2.show()">编辑英语页面按钮 </td>
                        <td>
                            <marquee behavior="alternate" direction="right">英语杂记 </marquee>
                        </td>
                        <td id="delete2" class="deleteBtn">删除英语页面按钮 </td>
                    </tr>
                    <tr>
                        <td>
                            <dialog id="myDialog2" class="myDialog">
                                <form class="dialog-form" method="dialog" id="Drag2">
                                    <h2>这是一个弹窗留言输入框</h2> <button>&times</button>
                                </form>
                                <form class="textarea-form">
                                    <input type="file" name="file2"
                                        accept="text/plain, text/css, text/html, text/javascript, text/markdown" />
                                    <sub>&lt;a
                                        class="href" href=" " target="_blank"&gt;&lt;/a&gt; &nbsp;&nbsp;&nbsp;&nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;lt;
                                        &amp;gt;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; <span
                                            style="color: red;user-select: text;">^\s*(?=\r?$)\n</span>
                                    </sub>
                                    <section>
                                        <input type="reset" value="重置">
                                        <textarea class="textarea2" name="textarea2" rows="18" cols="90%"
                                            placeholder="选择txt、js、css或html文件,文件内容会被自动读取"></textarea>
                                        <button type="button" class="abb-text2">添加</button>
                                    </section>
                                </form>
                            </dialog>
                            <output id="memo2"></output>
                        </td>
                    </tr>
                </table>
            </article>
            <!-- 第二页:英语  结束 -->
            <!-- -------------------------分割线---------------------------------------- -->
            <!-- 第三页:音乐 -->
            <article id="card3">
                <table>
                    <tr class="titleBtn">
                        <td class="displayBtn" onclick="myDialog3.show()">编辑音乐页面按钮 </td>
                        <td>
                            <marquee behavior="alternate" direction="right">音乐杂记 </marquee>
                        </td>
                        <td id="delete3" class="deleteBtn">删除音乐页面按钮</td>
                    </tr>
                    <tr>
                        <td>
                            <dialog id="myDialog3" class="myDialog">
                                <form class="dialog-form" method="dialog" id="Drag3">
                                    <h2>这是一个弹窗留言输入框</h2> <button>&times</button>
                                </form>
                                <form class="textarea-form">
                                    <input type="file" name="file3"
                                        accept="text/plain, text/css, text/html, text/javascript, text/markdown" />
                                    <sub>&lt;a
                                        class="href" href=" " target="_blank"&gt;&lt;/a&gt; &nbsp;&nbsp;&nbsp;&nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;lt;
                                        &amp;gt;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; <span
                                            style="color: red;user-select: text;">^\s*(?=\r?$)\n</span>
                                    </sub>
                                    <section>
                                        <input type="reset" value="重置">
                                        <textarea class="textarea3" name="textarea3" rows="18" cols="90%"
                                            placeholder="选择txt、js、css或html文件,文件内容会被自动读取"></textarea>
                                        <button type="button" class="abb-text3">添加</button>
                                    </section>
                                </form>
                            </dialog>
                            <output id="memo3"></output>
                        </td>
                    </tr>
                </table>
            </article>
            <!-- 第三页:音乐  结束 -->
            <!-- -------------------------分割线---------------------------------------- -->
            <!-- 第四页:项目 -->
            <article id="card4">
                <table>
                    <tr class="titleBtn">
                        <td class="displayBtn" onclick="myDialog4.show()">编辑项目页面按钮 </td>
                        <td>
                            <marquee behavior="alternate" direction="right">项目杂记 </marquee>
                        </td>
                        <td id="delete4" class="deleteBtn"> 删除项目页面按钮</td>
                    </tr>
                    <tr>
                        <td>
                            <dialog id="myDialog4" class="myDialog">
                                <form class="dialog-form" method="dialog" id="Drag4">
                                    <h2>这是一个弹窗留言输入框</h2> <button>&times</button>
                                </form>
                                <form class="textarea-form">
                                    <input type="file" name="file4"
                                        accept="text/plain, text/css, text/html, text/javascript, text/markdown" />
                                    <sub>&lt;a
                                        class="href" href=" " target="_blank"&gt;&lt;/a&gt; &nbsp;&nbsp;&nbsp;&nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;lt;
                                        &amp;gt;
                                        &nbsp;&nbsp;&nbsp;&nbsp; &amp;nbsp;
                                        &nbsp;&nbsp;&nbsp;&nbsp; <span
                                            style="color: red;user-select: text;">^\s*(?=\r?$)\n</span>
                                    </sub>
                                    <section>
                                        <input type="reset" value="重置">
                                        <textarea class="textarea4" name="textarea4" rows="18" cols="90%"
                                            placeholder="快速去除VS Code自动添加的空行: 通过Ctrl+h快捷键调出替换界面添加 ^\s*(?=\r?$)\n 并Alt+R"></textarea>
                                        <button type="button" class="abb-text4">添加</button>
                                    </section>
                                </form>
                            </dialog>
                            <output id="memo4">
                            </output>
                        </td>
                    </tr>
                </table>
            </article>
            <!-- 第四页:项目  结束-->
        </section>
        <!--中间留言区  结束 -->
        <!-- -------------------------分割线---------------------------------------- -->
        <!-- 右侧边栏 -->
        <aside class="aside_right">
            <h2> 网站收藏</h2>
            <details class="webList">
                <summary>
                    收藏列表
                </summary>
            </details>
            <details class="localList">
                <summary>
                    本地列表
                </summary>
            </details>
        </aside>
        <!-- 右侧边栏  结束-->
    </main>
    <!-- 中间区域main  结束-->
    <!-- -------------------------分割线---------------------------------------- -->
    <!-- 页脚 -->
    <footer>
        更新时间:
        <script>document.write('2024/09/05 20:00:00');</script>
        </span>
        <a href="https://blog.csdn.net/lulei5153" target="_blank">作者:与妖为邻</a>
        刷新时间:
        <script>
            document.write((d = new Date(), `${d.getFullYear()}-${('0' + (d.getMonth() + 1)).slice(-2)}-${('0' + d.getDate()).slice(-2)} 星期${'日一二三四五六'[d.getDay()]} ${('0' + d.getHours()).slice(-2)}:${('0' + d.getMinutes()).slice(-2)}:${('0' + d.getSeconds()).slice(-2)}`));
        </script>
        </script>
    </footer>
    <!-- 页脚  结束-->
</body>
<script src="file:///D:/web/html首页/网站收藏.js"></script>
<!-- 修改数据器引入 highlight.js 的 JavaScript 文件 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script>
    /* 现在时间 */
    (s = el => { d = new Date, f = n => ("0" + n).slice(-2), w = "日一二三四五六"; el.innerHTML = `${d.getFullYear()}-${f(d.getMonth() + 1)}-${f(d.getDate())}<sub>星期${w[d.getDay()]}</sub>${f(d.getHours())}:${f(d.getMinutes())}:${f(d.getSeconds())}` })(setInterval(() => ["dateTime1", "dateTime2"].forEach(id => s(document.getElementById(id))), 1000));
    /* 现在时间 结束 */
    /* 倒计时 */
    function countdown() {
        // 加载时从localStorage读取数据
        window.onload = function () {
            ['message', 'targetDate'].forEach(key => {
                const value = localStorage.getItem(key);
                if (value) document.getElementById(key).value = value;
            });
        };
        // 保存数据到localStorage
        function saveData() {
            ['message', 'targetDate'].forEach(key => {
                const value = document.getElementById(key).value;
                localStorage.setItem(key, value);
            });
        }
        // 监听输入框的变化并保存数据
        ['message', 'targetDate'].forEach(id => {
            document.getElementById(id).addEventListener('input', saveData);
        });
        function showCountdown() {
            const message = document.getElementById('message').value;
            const targetDateInput = document.getElementById('targetDate');
            const targetDateValue = targetDateInput.value;
            const now = new Date();
            const targetDate = targetDateValue ? new Date(targetDateValue) : new Date(2024, 9, 1); // 默认值:2024年10月1日
            const diff = targetDate - now;
            const days = Math.floor(diff / (1000 * 60 * 60 * 24));
            const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
            const seconds = Math.floor((diff % (1000 * 60)) / 1000);
            const countdownElement = document.getElementById('countdownElement');
            countdownElement.innerHTML = `${message}${days}天${hours}小时${minutes}分${seconds}秒`;
        }
        showCountdown();
        setInterval(showCountdown, 1000);
    }
    // 调用函数以启动倒计时
    countdown();
    /* 倒计时 结束*/
    /* 全屏功能与关闭*/
    function fullScreen() {
        var elem = document.documentElement;
        if (elem.requestFullscreen) {
            elem.requestFullscreen();
        } else if (elem.mozRequestFullScreen) { // Firefox
            elem.mozRequestFullScreen();
        } else if (elem.webkitRequestFullscreen) { // Chrome, Safari and Opera
            elem.webkitRequestFullscreen();
        } else if (elem.msRequestFullscreen) { // IE/Edge
            elem.msRequestFullscreen();
        }
    }
    function exitFullScreen() {
        if (document.exitFullscreen) {
            document.exitFullscreen();
        } else if (document.mozCancelFullScreen) { // Firefox
            document.mozCancelFullScreen();
        } else if (document.webkitExitFullscreen) { // Chrome, Safari and Opera
            document.webkitExitFullscreen();
        } else if (document.msExitFullscreen) { // IE/Edge
            document.msExitFullscreen();
        }
    }
    // 获取全屏和还原按钮
    var fullScreenBtn = document.querySelector(".fullScreen");
    var exitFullScreenBtn = document.querySelector(".exitFullScreen");
    // 监听全屏和还原事件
    document.addEventListener("fullscreenchange", function () {
        if (document.fullscreenElement) {
            fullScreenBtn.style.display = "none";
            exitFullScreenBtn.style.display = "block";
        } else {
            fullScreenBtn.style.display = "block";
            exitFullScreenBtn.style.display = "none";
        }
    });
    // 关闭当前窗口
    function closeAll() {
        window.close();
    }
    /* 全屏功能与关闭 结束*/
    /* 左侧导航 */
    // 定义变量
    let chosenSlideNumber = 1; // 当前选择的幻灯片编号
    let offset = 0; // 幻灯片偏移量
    let barOffset = 0; // 导航条偏移量
    // 切换抽屉面板和按钮状态
    function toggleDrawer(previous, current) {
        const drawerBoxes = document.querySelectorAll(".aside_left article");
        const drawerBtnS = document.querySelectorAll(".aside_left button");
        drawerBoxes[previous - 1].classList.toggle("active");
        drawerBoxes[current - 1].classList.toggle("active");
        drawerBtnS[previous - 1].classList.toggle("active");
        drawerBtnS[current - 1].classList.toggle("active");
    }
    // 移动导航条
    function moveBar(barOffset) {
        const bar = document.querySelector("#bar p");
        bar.style.transform = `translateY(${barOffset}%)`;
    }
    // 切换到指定编号的幻灯片
    function slideTo(slideNumber) {
        let previousSlideNumber = chosenSlideNumber;
        // 更新偏移量
        chosenSlideNumber = slideNumber;
        let slideDelta = (slideNumber - previousSlideNumber) * 100;
        offset -= slideDelta; // 计算幻灯片偏移量
        barOffset += slideDelta; // 计算导航条偏移量
        // 切换抽屉面板和按钮状态
        toggleDrawer(previousSlideNumber, slideNumber);
        // 移动幻灯片和导航条
        moveSlides(offset);
        moveBar(barOffset);
    }
    // 移动幻灯片
    function moveSlides(offset) {
        const slides = document.querySelectorAll("#card-section article");
        slides.forEach((slide) => {
            slide.style.transform = `translateY(${offset}%)`;
        });
    }
    /*左侧导航结束*/
    /*留言内容*/
    document.addEventListener("DOMContentLoaded", function () {
        const todoContainers = [
            { textarea: ".textarea1", button: ".abb-text1", container: "#memo1", storageKey: "home" },
            { textarea: ".textarea2", button: ".abb-text2", container: "#memo2", storageKey: "English" },
            { textarea: ".textarea3", button: ".abb-text3", container: "#memo3", storageKey: "Music" },
            { textarea: ".textarea4", button: ".abb-text4", container: "#memo4", storageKey: "Project" },
        ];
        todoContainers.forEach(({ textarea, button, container, storageKey }) => {
            const upText = document.querySelector(textarea);
            const addTo = document.querySelector(button);
            const memo = document.querySelector(container);
            addTo.addEventListener("click", function () {
                if (upText.value.trim() !== "") {
                    insertHtml(memo, upText.value, "");
                    upText.value = "";
                    upText.focus();
                    saveTodo();
                } else {
                    alert("内容为空,无法添加!");
                }
            });
            function saveTodo() {
                let todoArr = Array.from(memo.querySelectorAll(".Message")).map(
                    (content) => ({
                        name: content.innerHTML,
                        finish: content.classList.contains("finish"),
                    })
                );
                localStorage.setItem(storageKey, JSON.stringify(todoArr));
            }
            function loadTodo() {
                try {
                    let todoArr = JSON.parse(localStorage.getItem(storageKey) || "[]");
                    todoArr.forEach((todo) => {
                        insertHtml(memo, todo.name, todo.finish ? "finish" : "");
                    });
                } catch (e) {
                    console.error(`Failed to load todo for ${storageKey}`, e);
                }
            }
            memo.addEventListener("click", function (event) {
                const target = event.target;
                const tgKids = target.parentElement.children;
                if (tgKids[0].checked) {
                    tgKids[1].classList.add("finish");
                } else {
                    tgKids[1].classList.remove("finish");
                }
                saveTodo();
            });
            document
                .getElementById(
                    `delete${button === ".abb-text" ? "" : button.match(/\d+/)[0]}`
                )
                .addEventListener("click", function () {
                    const checkedBoxes = memo.querySelectorAll("input[name='checkbox']:checked");
                    if (checkedBoxes.length === 0) {
                        alert("没有选择任何项目");
                    } else {
                        if (confirm("是否删除所选?")) {
                            checkedBoxes.forEach((checkbox) => {
                                checkbox.parentElement.remove();
                            });
                            saveTodo();
                            updateIndexes(); // 更新序号
                        }
                    }
                });
            // 添加动态id属性
            function generateUniqueId() {
                return 'checkbox-' + Math.random().toString(36).substr(2, 9);
            }
            function insertHtml(target, val, cls) {
                const uniqueId = generateUniqueId();
                const index = getNextIndex();
                target.insertAdjacentHTML(
                    "beforeend",
                    `<div class='Success'>
                    ${index}.
                     <input type="checkbox" name='checkbox' id='${uniqueId}'>
                     <label class='Message ${cls}' for='${uniqueId}'> ${val}</label>
                 </div>`
                );
            }
            let indexCounter = 1;
            function getNextIndex() {
                return indexCounter++;
            }
            function updateIndexes() {
                const messages = memo.querySelectorAll('.Success');
                messages.forEach((message, index) => {
                    message.firstChild.textContent = `${index + 1}.`;
                });
                indexCounter = messages.length + 1; // 更新计数器
            }
            // 显示所有复选框10秒后自动隐藏
            document.getElementById('showCheckboxesButton').addEventListener('click', function () {
                // 获取所有带有 name='checkbox' 的复选框
                const checkboxes = document.querySelectorAll('input[name="checkbox"]');
                // 遍历并显示每个复选框
                checkboxes.forEach(function (checkbox) {
                    checkbox.style.display = 'inline'; // 或其他你希望的显示方式
                });
                // 10秒倒计时
                let countdown = 10;
                const countdownInterval = setInterval(function () {
                    // 使用padStart方法将个位数补0
                    const countdownWithZero = countdown.toString().padStart(2, '0');
                    document.getElementById('showCheckboxesButton').innerHTML = `显示所有复选框 <span class='countdown'>${countdownWithZero}</span> 秒后自动隐藏`;
                    countdown--;
                    if (countdown < 0) {
                        clearInterval(countdownInterval);
                        document.getElementById('showCheckboxesButton').textContent = '显示所有复选框10秒后自动隐藏';
                        // 隐藏复选框
                        checkboxes.forEach(function (checkbox) {
                            checkbox.style.display = 'none'; // 或其他你希望的隐藏方式
                        });
                    }
                }, 1000); // 每秒更新一次
            });
            // 在页面加载时调用持久化存储的loadTodo()函数
            loadTodo();
        });
    });
    /*本地文件上传添加按钮*/
    window.onload = function () {
        var setups = [
            { textName: "textarea1", fileName: "file1" },
            { textName: "textarea2", fileName: "file2" },
            { textName: "textarea3", fileName: "file3" },
            { textName: "textarea4", fileName: "file4" },
        ];
        setups.forEach(function (setup) {
            var text = document.getElementsByName(setup.textName)[0];
            var inputFile = document.getElementsByName(setup.fileName)[0];
            if (text && inputFile) {
                // 检查元素是否存在
                inputFile.onchange = function () {
                    var reader = new FileReader();
                    reader.readAsText(this.files[0], "UTF-8");
                    reader.onload = function () {
                        text.value = this.result;
                    };
                    reader.onerror = function () {
                        console.error("Failed to read file: " + reader.error);
                        alert("Failed to read file. Please try again.");
                    };
                };
            }
        });
    };
    /*本地文件上传添加按钮 结束*/
    /* 右侧边栏网站收藏 */
    const webList = document.querySelector(".webList");
    const localList = document.querySelector(".localList");
    const createLink = (title, src) => {
        if (!title || !src) {
            console.error("链接缺少必要的属性");
            return null;
        }
        const link = document.createElement("a");
        link.href = src;
        link.target = "_blank";
        link.innerText = title;
        return link;
    };
    const createList = (list, parent) => {
        if (!parent) {
            console.error("父元素未找到");
            return;
        }
        const ul = document.createElement("ul");
        list.forEach((item) => {
            const link = createLink(item.title, item.src);
            if (link) {
                const li = document.createElement("li");
                li.appendChild(link);
                ul.appendChild(li);
            }
        });
        parent.appendChild(ul);
    };
    createList(webLinks, webList);
    createList(localLinks, localList);
    /* 右侧边栏网站收藏 结束 */
    /* 通用的拖动功能 */
    const initDragAndDisplay = (hiddenElementId, dragElementId) => {
        const hiddenElement = document.querySelector(hiddenElementId);
        document.querySelector(dragElementId).addEventListener("mousedown", (e) => {
            const x = e.pageX - hiddenElement.offsetLeft;
            const y = e.pageY - hiddenElement.offsetTop;
            const move = (e) => {
                hiddenElement.style.left = e.pageX - x + "px";
                hiddenElement.style.top = e.pageY - y + "px";
            };
            document.addEventListener("mousemove", move);
            document.addEventListener("mouseup", () => {
                document.removeEventListener("mousemove", move);
            }, { once: true });
        });
    };
    /* 初始化所有的拖动按钮 */
    const initAllDragsAndDisplays = () => {
        ["", "2", "3", "4"].forEach((num) => {
            initDragAndDisplay(`#myDialog${num}`, `#Drag${num}`);
        });
    };
    initAllDragsAndDisplays();
    /* 4个拖动按钮的实现结束*/
    /*编辑文本输入框的占位符*/
    document.addEventListener('DOMContentLoaded', function () {
        const editor = document.getElementById('editor');
        const placeholder = editor.getAttribute('data-placeholder');
        editor.addEventListener('focus', function () {
            if (editor.textContent === placeholder) {
                editor.textContent = '';
                editor.style.color = ''; // 恢复默认颜色
            }
        });
        editor.addEventListener('blur', function () {
            if (editor.textContent === '') {
                editor.textContent = placeholder;
                editor.style.color = 'gray'; // 设置占位符颜色
            }
        });
        // 初始化时检查内容
        if (editor.textContent === '') {
            editor.textContent = placeholder;
            editor.style.color = 'gray'; // 设置占位符颜色
        }
    });
    /*编辑文本输入框的占位符 结束*/
    /* 编辑文本输入框的清空按钮 */
    document.getElementById('btnReset').addEventListener('click', function () {
        document.getElementById('editor').innerText = '';
    });
    /* 简单的文本编辑器 */
    document.addEventListener('DOMContentLoaded', () => {
        const editor = document.getElementById('editor');
        const exportedHtml = document.getElementById('textareaHTML');
        function execCmd(command, value = null) {
            document.execCommand(command, false, value);
        }
        function exportHtml() {
            // 获取编辑器内容
            let htmlContent = editor.innerHTML;
            // 使用正则表达式查找所有 <a> 标签并添加 target="_blank"
            htmlContent = htmlContent.replace(/<a\s+/g, '<a target="_blank" ');
            // 设置导出的 HTML 内容
            exportedHtml.value = htmlContent;
        }
        document.getElementById('toolbar').addEventListener('click', (event) => {
            const target = event.target;
            const command = target.id.replace('btn', '');
            switch (command) {
                case 'Bold':
                case 'Italic':
                case 'Underline':
                case 'StrikeThrough':
                case 'InsertOrderedList':
                case 'InsertUnorderedList':
                case 'JustifyLeft':
                case 'JustifyCenter':
                case 'JustifyRight':
                case 'JustifyFull':
                case 'Unlink':
                case 'Undo':
                case 'Redo':
                    execCmd(command);
                    break;
                case 'CreateLink':
                case 'InsertImage':
                case 'ForeColor':
                case 'Background':
                    const value = prompt(`输入${command === 'CreateLink' ? '链接地址' : command === 'InsertImage' ? '图片地址' : command === 'ForeColor' ? '文字颜色' : '背景颜色'}`, command === 'CreateLink' ? 'http://' : command === 'InsertImage' ? 'http://' : command === 'ForeColor' ? '#000000' : '#ffff00');
                    execCmd(command, value);
                    break;
                case 'ExportHtml':
                    exportHtml();
                    break;
            }
        });
        editor.focus();
    });
    /*简单的文本编辑器 结束*/
    /*修改数据器*/
    function initializeFileEditor() {
        // 初始化对话框内容
        document.getElementById('addReadFolderArea').innerHTML = `
    <div id="addReadFolder">
        <form id="buttonContainer">
            <div id="fileTree"></div>
            <button type="button" id="fileSave">保存</button>
            <button type="submit"  class="cancel-button">关闭</button>                
        </form>
        <div id="fileContent" contenteditable="true" name="textarea1"></div>
    </div>
    `;
        // 修改数据器功能
        let currentFileHandle = null; // 变量用于存储当前文件句柄
        document.getElementById('readFolder').addEventListener('click', async () => {
            try {
                const directoryHandle = await window.showDirectoryPicker();
                const fileTree = document.getElementById('fileTree');
                const fileContent = document.getElementById('fileContent');
                fileTree.innerHTML = ''; // 清空文件树内容
                fileContent.innerHTML = ''; // 清空文件内容区域
                async function readDirectory(directoryHandle, parentElement) {
                    const ul = document.createElement('ul');
                    parentElement.appendChild(ul);
                    for await (const entry of directoryHandle.values()) {
                        const li = document.createElement('li');
                        const entryName = document.createElement('span');
                        entryName.textContent = entry.name;
                        li.appendChild(entryName);
                        ul.appendChild(li);
                        if (entry.kind === 'directory') {
                            entryName.textContent = `[文件夹] ${entry.name}`;
                            li.addEventListener('click', async (e) => {
                                e.stopPropagation();
                                if (li.classList.contains('open')) {
                                    li.classList.remove('open');
                                    li.querySelector('ul').remove();
                                } else {
                                    li.classList.add('open');
                                    await readDirectory(entry, li);
                                }
                            });
                        } else if (entry.kind === 'file') {
                            li.addEventListener('click', async (e) => {
                                e.stopPropagation();
                                currentFileHandle = entry;
                                const file = await entry.getFile();
                                fileContent.style.display = 'block';
                                fileContent.textContent = await file.text();
                                // 使用 highlight.js 高亮显示代码
                                hljs.highlightElement(fileContent);
                            });
                            const deleteButton = document.createElement('button');
                            deleteButton.textContent = '删除';
                            deleteButton.classList.add('delete-button');
                            deleteButton.addEventListener('click', async (e) => {
                                e.stopPropagation();
                                if (confirm(`确定删除 ${entry.name}?`)) {
                                    await directoryHandle.removeEntry(entry.name);
                                    li.remove();
                                    fileContent.innerHTML = '';
                                    alert('文件删除成功!');
                                }
                            });
                            entryName.appendChild(deleteButton);
                        }
                    }
                }
                await readDirectory(directoryHandle, fileTree);
            } catch (error) {
                console.error('操作失败:', error);
                alert('操作失败,请重试。');
            }
        });
        // 同时按下Ctrl键和's'键保存
        document.addEventListener('keydown', async (event) => {
            if (event.ctrlKey && event.key === 's') {
                event.preventDefault();
                try {
                    if (currentFileHandle) {
                        const writable = await currentFileHandle.createWritable();
                        await writable.write(document.getElementById('fileContent').textContent);
                        await writable.close();
                        alert('文件保存成功!');
                    }
                } catch (error) {
                    console.error('保存失败:', error);
                    alert('保存失败,请重试。');
                }
            }
        });
        // 为id="fileSave"的保存按钮添加保存功能
        document.getElementById('fileSave').addEventListener('click', async () => {
            try {
                if (currentFileHandle) {
                    const writable = await currentFileHandle.createWritable();
                    await writable.write(document.getElementById('fileContent').textContent);
                    await writable.close();
                    alert('文件保存成功!');
                } else {
                    alert('请先选择一个文件进行编辑。');
                }
            } catch (error) {
                console.error('保存失败:', error);
                alert('保存失败,请重试。');
            }
        });
    }
    // 初始化文件编辑器
    initializeFileEditor();
    /*修改数据器 结束*/
</script>
</html>

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

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

相关文章

图欧科技-IMYAI智能助手24年8月更新日志大汇总(含史诗级更新)

IMYAI史诗级更新 图欧君最近行程排得满满当当 但请各位小伙伴放心 我们的更新步伐从未停歇 而这次我们IMYAI主站也迎来了史诗级升级 一起来看看这个8月 我们又新增了哪些功能和优化吧~ 8.26&#xff5c;更新日志 模型选择界面鼠标悬停左右按钮可以自动滚动&#xff08;手机端长…

在人工智能的浪潮中:AI大模型的涌现、商业变革与产品经理的应对策略

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;作为一股不可阻挡的力量&#xff0c;正以前所未有的速度重塑着我们的世界。其中&#xff0c;AI大模型以其惊人的涌现能力和创造力&#xff0c;成为了这场技术革命中的璀璨明星。正如达尔文所言&#xff1a;…

ARM切换工作模式,异常处理

切换工作模式 处理软中断 preserve8area reset, code, readonlycode32entryb start ;resetnop ;undefb deal_swi ;swinop ;prefetch abortnop ;data abortnop ;reservednop ;irpnop ;fiq deal_swistmfd sp!,{r4-r12,lr};保护现场sub r1,lr,#4 …

代码随想录刷题day23丨39. 组合总和,40.组合总和II, 131.分割回文串

代码随想录刷题day23丨39. 组合总和&#xff0c;40.组合总和II&#xff0c; 131.分割回文串 1.题目 1.1组合总和 题目链接&#xff1a;39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; 视频讲解&#xff1a;带你学透回溯算法-组合总和&#xff08;对应「leetcode」力…

计算机网络基础笔记(二)

计算机网络基础笔记&#xff08;二&#xff09; OSI网络模型 osi&#xff08;开放系统互联–Open System Interconnect&#xff09;模型是一种通信协议的框架&#xff0c;作用是在不同计算机系统之间互联。该模型间通信分为七个层次&#xff0c;每个层次负责特定的功能&#…

设计模式-单例模式工厂模式

3.1 单例模式 1.概念 用类来实现单例。由于某种需要&#xff0c;要保证一个类在程序的生命周期中只有一个实例&#xff0c;并且提供该实例的全局访问方法。 2.结构三要素 1)私有的静态对象属性private static instance&#xff0c;它的类型就是当前类的对象&#xff0c;静态…

Windows JDK安装详细教程

一、关于JDK 1.1 简介 Java是一种广泛使用的计算机编程语言&#xff0c;拥有跨平台、面向对象、泛型编程的特性&#xff0c;广泛应用于企业级Web应用开发和移动应用开发。 JDK&#xff08;Java Development Kit&#xff09;是用于开发 Java 应用程序的工具包。它由以下几个主要…

Python 学习笔记(二)

类 构造方法 魔术方法 类的私有成员 继承 语法 class 类(父类1&#xff0c;父类2&#xff0c;...)&#xff1a; 类内容体 对父类的复写 注解 多态

J.U.C Review - 常见的通信工具类解析

文章目录 概述1. Semaphore2. Exchanger3. CountDownLatch4. CyclicBarrier5. Phaser 原理 & Code1. Semaphore2. Exchanger3. CountDownLatch4. CyclicBarrier5. Phaser 概述 Java 的 java.util.concurrent 包提供了许多实用的工具类&#xff0c;用于简化并发编程。这些工…

计算机网络练级第一级————认识网络

网络搁哪&#xff1f; 网络大家应该都很熟悉了&#xff0c;但网络具体是怎么构成的&#xff0c;怎么用的&#xff1f;长话短说 我认为网络就是计算机里的快递业务&#xff0c;从一台计算机中发出&#xff0c;网络接收到数据后&#xff0c;就要把这个数据安全快速完整地发到目…

【idea】设置文件模板

搜索 File and Code Templates 。 添加模板。 在任意文件目录下右键&#xff0c;new->找到添加的模板。 参考链接&#xff1a; IDEA创建模板文件_edit file templates-CSDN博客

科研绘图系列:R语言宏基因组堆积图(stacked barplot)

介绍 宏基因组堆积条形图是一种数据可视化工具,用于展示宏基因组数据中不同分类群(如微生物群落中的物种或菌株)的相对丰度。宏基因组学(Metagenomics)是一种研究环境样本中所有生物的遗传物质(DNA和RNA)的科学,不依赖于培养,可以直接从环境样本中提取DNA进行测序。 …

Windows server 2016 .net framwork 安装

解决方法: 1、windows server 2016默认是不安装.netframework3.5的,可以在添加删除程序中单独添加。但是有时候系统安装文件不在的时候,找不到安装程序就不能安装成功。 这时候单独下载dotnetfx35直接安装是安装不上的,需要用以下方法进行。 2、单独安装: 通过 NetFx3.c…

无人机之动力系统篇

无人机的动力系统是其飞行中最为核心的部分&#xff0c;它决定了无人机的飞行性能和稳定性。一个完整的无人机动力系统通常由多个关键组件组成&#xff0c;这些组件协同工作&#xff0c;为无人机提供动力。以下是对无人机动力系统的详细解析&#xff1a; 一、主要组成部分 电…

大模型训练框架LLaMAFactory覆盖预训练指令微调强化学习评估全流程

1. 项目背景 开源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用数据进行训练而来&#xff0c;其对于不同下游的使用场景和垂直领域的效果有待进一步提升&#xff0c;衍生出了微调训练相关的需求&#xff0c;包含预训练&#xff08;pt&#xff09;&…

3174. 清除数字(Java)

3174. 清除数字(Java) 1.Java 的 StringBuilder 初用。 2. StringBuffer和StringBuilder方法类似&#xff0c;Buffer支持同步访问&#xff0c;线程安全&#xff0c;速度比较慢&#xff0c;所以Buffer用的少&#xff0c;Builder用的多。 class Solution {public String clearD…

C语言深度剖析--不定期更新的第二弹

好久不见&#xff0c;甚是想念。书接上回&#xff0c;继续前进&#xff01; 关键字static-最名不副实的关键字 对extern声明的小小补充 当我要对一个函数进行声明的时候可不可以像如下情况&#xff1a; extern int v_gal100;对这个变量进行了赋值&#xff0c;这是不可以的&a…

相互作用先验下的 3D 分子生成扩散模型 - IPDiff 评测

IPDiff 是一个基于蛋白质-配体相互作用先验引导的扩散模型&#xff0c;首次把配体-靶标蛋白相互作用引入到扩散模型的扩散和采样过程中&#xff0c;用于蛋白质&#xff08;口袋&#xff09;特异性的三维分子生成。 本文将对 IPDiff 实际的分子生成能力进行评测。 一、背景介绍 …

动态规划的解题思想

1. 从斐波那契数列说起 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c; &#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0, F(2) 1 F&#xff08;n&#xff09; F&…

【C++】C++ STL探索:Vector使用与背后底层逻辑

C语法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;命名空间缺省参数与函数重载C相关特性类和对象-上篇类和对象-中篇类和对象-下篇日期类C/C内存管理模板初阶String使用String模拟实现 在string类文章中提及了STL容器间的接口是大差不差的&#xff0c;本篇将直…