前端项目-记事本制作

效果预览:

夜间模式:

日间模式:

应用的主要功能:

  • 记事功能:你可以在文本框中输入你的笔记,然后点击“保存”按钮,你的笔记就会被保存下来。你可以随时查看和删除你的笔记。
  • 夜间模式:我们的应用支持夜间模式,你可以点击“切换模式”按钮来切换夜间模式和日间模式。夜间模式有助于在光线较暗的环境中保护你的眼睛。
  • 自定义背景:你可以选择一张图片作为应用的背景。只需要点击“选择背景”按钮,然后选择你喜欢的图片,这个图片就会被设置为背景。我们还提供了一个半透明的覆盖层,可以让背景图片变得更加柔和。
  • 响应式设计:我们的应用使用了响应式设计,这意味着它可以在任何设备上正常工作,无论是桌面电脑、笔记本电脑、平板电脑还是手机。
  • 本地存储:我们的应用使用了本地存储技术,这意味着你的笔记、模式选择和背景图片都会被保存在你的设备上,即使你关闭了浏览器或者重启了设备,你的设置和笔记也不会丢失。

代码解析:

        body, textarea {
            font-family: 'Arial Rounded MT', Arial, sans-serif;
            padding: 20px;
            background: white;
            background: linear-gradient(to right, white, #f3f3f8);
            background-size: cover;
            display: flex;
            flex-direction: column;
            align-items: center;
            height: 100vh;
            margin: 0;
            color: #333;
            font-size: 18px;
            line-height: 1.6;
            transition: background 0.5s, color 0.5s;
            opacity: 0;
            animation: fadeIn 2s ease-in forwards;
        }

        @keyframes fadeIn {
            from { opacity: 0; }
            to { opacity: 1; }
        }

        body.night {
            background: #333;
            background: linear-gradient(to right, #333, #555);
            color: #ddd;
        }

        textarea {
            width: 80%;
            height: 100px;
            padding: 15px;
            box-sizing: border-box;
            margin-bottom: 10px;
            font-size: 16px;
            border: 2px solid #ccc;
            border-radius: 4px;
            background-color: #f8f8f8;
            resize: none;
            box-shadow: 0 0 10px rgba(0,0,0,0.1);
            transition: background 0.5s, border 0.5s;
        }

        body.night textarea {
            background-color: #555;
            border-color: #888;
            color: #ddd;
        }

        button {
            display: block;
            width: 100px;
            margin: 20px auto;
            padding: 10px;
            font-size: 18px;
            background-color: #4CAF50; /* Green */
            border: none;
            color: white;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
            border-radius: 12px;
            transition: all 0.3s;
        }

        button:hover {
            transform: scale(1.1);
        }

        body.night button {
            color: #ddd;
        }

        #savedNotes {
            font-size: 16px;
            color: #333;
            width: 80%;
            transition: color 0.5s;
        }

        body.night #savedNotes {
            color: #ddd;
        }

        .note {
            position: relative;
            padding: 10px;
            border: 1px solid #ccc;
            margin-bottom: 10px;
            transition: border 0.5s;
        }

        body.night .note {
            border-color: #888;
        }

        .deleteButton {
            position: absolute;
            top: 0;
            right: 0;
            background-color: red;
            color: white;
            border: none;
            cursor: pointer;
            border-radius: 50%;
            width: 20px;
            height: 20px;
            opacity: 0.7;
            font-size: 14px;
            display: flex;
            align-items: center;
            justify-content: center;
        }
# 鼠标放在哪里的时候,不透明度设置为1
        .deleteButton:hover {
            opacity: 1;
        }
# 夜间模式删除按钮的颜色设置
        body.night .deleteButton {
            color: #ddd;
        }
# 切换夜间、白天模式的按钮
        #modeSwitch {
            position: fixed;
            top: 20px;
            right: 20px;
            cursor: pointer;
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 20px;
            font-size: 16px;
            border-radius: 12px;
            transition: background-color 0.5s, color 0.5s;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        body.night #modeSwitch {
            background-color: #555;
            color: #ddd;
        }

        @media (max-width: 600px) {
            textarea, #savedNotes {
                width: 100%;
            }
        }
        #backgroundInput {
            display: none;
        }
# 这部分是初始及选择图片后背景的设计:
        #backgroundLabel {
            position: fixed;
            top: 20px;
            left: 20px;
            cursor: pointer;
            background-color: #4CAF50;
            color: white;
            border: none;
            padding: 10px 20px;
            font-size: 16px;
            border-radius: 12px;
            transition: background-color 0.5s, color 0.5s;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;
        }

        body.night #backgroundLabel {
            background-color: #555;
            color: #ddd;
        }
# 这部分是覆盖图层用于柔滑背景图片的代码:
        body::before {
            content: "";
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: rgba(255, 255, 255, 0.5);
            z-index: -1;
        }

        body.night::before {
            background: rgba(0, 0, 0, 0.5);
        }
<body>
    <textarea id="noteText" rows="10" cols="30"></textarea>
    <button id="saveButton">保存</button>
    <div id="savedNotes"></div>
    <button id="modeSwitch">切换模式</button>
    <input type="file" id="backgroundInput" accept="image/*">
    <label for="backgroundInput" id="backgroundLabel">选择背景</label>
    <script>
# 采用Json parse来进行数据的存储及读取。
        var notes = JSON.parse(localStorage.getItem('notes')) || [];
        var nightMode = localStorage.getItem('nightMode') === 'true';
        var backgroundImage = localStorage.getItem('backgroundImage');
# 显示出来所有的已经保存的记事本内容
        // Display all saved notes
        document.getElementById('savedNotes').innerHTML = notes.map(function(note, index) {
            return '<div class="note"><p>' + note + '</p><button class="deleteButton" data-index="' + index + '">X</button></div>';
        }).join('');

        document.getElementById('saveButton').addEventListener('click', function() {
            var noteText = document.getElementById('noteText').value;
            notes.push(noteText);
            localStorage.setItem('notes', JSON.stringify(notes));
            document.getElementById('savedNotes').innerHTML += '<div class="note"><p>' + noteText + '</p><button class="deleteButton" data-index="' + (notes.length - 1) + '">X</button></div>';
            document.getElementById('noteText').value = '';
        });

        document.getElementById('savedNotes').addEventListener('click', function(e) {
            if(e.target.className === 'deleteButton') {
                var index = e.target.getAttribute('data-index');
                notes.splice(index, 1);
                localStorage.setItem('notes', JSON.stringify(notes));
                e.target.parentElement.remove();
            }
        });

        document.getElementById('modeSwitch').addEventListener('click', function() {
            nightMode = !nightMode;
            localStorage.setItem('nightMode', nightMode);
            document.body.className = nightMode ? 'night' : '';
        });

        document.getElementById('backgroundInput').addEventListener('change', function(e) {
            var file = e.target.files[0];
            var reader = new FileReader();
            reader.onloadend = function() {
                document.body.style.backgroundImage = 'url(' + reader.result + ')';
                localStorage.setItem('backgroundImage', reader.result);
            }
            if (file) {
                reader.readAsDataURL(file);
            } else {
                document.body.style.backgroundImage = '';
            }
        });

        // Set initial mode and background
        document.body.className = nightMode ? 'night' : '';
        if (backgroundImage) {
            document.body.style.backgroundImage = 'url(' + backgroundImage + ')';
        }
    </script>
</body>
posted @ 2023-08-04 19:27  aondw  阅读(196)  评论(0编辑  收藏  举报