JavaScript是一种功能强大的编程语言,可以用于创建各种动态和交互式的网页应用。本篇博客将向您展示如何使用JavaScript来创建一个简单的在线记事本。这个记事本将允许用户输入文本,并能够保存和加载他们的笔记。
首先,我们需要创建一个简单的HTML界面,包括一个文本输入框和一个提交按钮。代码如下
在线记事本
在线记事本
接下来,我们需要在JavaScript中实现记事本的功能。我们可以通过Web Storage API来实现保存和加载笔记的功能。代码如下:
// 保存笔记
function saveNote() {
const noteInput = document.getElementById('note-input');
const noteText = noteInput.value;
localStorage.setItem('note', noteText);
}
// 加载笔记
function loadNote() {
const noteInput = document.getElementById('note-input');
const noteText = localStorage.getItem('note');
noteInput.value = noteText;
}
最后,我们需要测试我们的记事本应用。您可以通过打开HTML文件并在浏览器中查看结果。保存和加载笔记应该正常工作,并且您可以在文本框中输入文本。
在线记事本
在线记事本
// 假设我们有一个固定的密码 "password123"
const PASSWORD = "password123";
// 保存笔记,并验证密码是否正确
function saveNote() {
const noteInput = document.getElementById('note-input');
const noteText = noteInput.value;
const passwordInput = document.getElementById('password');
const password = passwordInput.value;
if (password === PASSWORD) {
localStorage.setItem('note', noteText);
alert('笔记已保存!');
} else {
alert('密码错误!');
}
}
// 加载笔记,并验证密码是否正确
function loadNote() {
const noteInput = document.getElementById('note-input');
const passwordInput = document.getElementById('password');
const password = passwordInput.value;
if (password === PASSWORD) {
const noteText = localStorage.getItem('note');
noteInput.value = noteText;
alert('笔记已加载!');
} else {
alert('密码错误!');
}
}
// 引入CryptoJS库
const CryptoJS = require('crypto-js');
// 加密笔记
function encryptNote() {
const noteInput = document.getElementById('note-input');
const noteText = noteInput.value;
const passwordInput = document.getElementById('password');
const password = passwordInput.value;
const encryptedNote = CryptoJS.AES.encrypt(noteText, password).toString();
localStorage.setItem('encryptedNote', encryptedNote);
}
// 解密笔记
function decryptNote() {
const passwordInput = document.getElementById('password');
const password = passwordInput.value;
const encryptedNote = localStorage.getItem('encryptedNote');
if (encryptedNote) {
const bytes = CryptoJS.AES.decrypt(encryptedNote, password);
const decryptedNote = bytes.toString(CryptoJS.enc.Utf8);
const noteInput = document.getElementById('note-input');
noteInput.value = decryptedNote;
} else {
alert('没有可加载的加密笔记!');
}
}
// 获取历史记录列表
function getHistory() {
const historyList = JSON.parse(localStorage.getItem('history'));
if (historyList) {
return historyList;
} else {
return [];
}
}
// 添加历史记录
function addHistory(noteText, timestamp) {
const history = getHistory();
history.push({ noteText, timestamp });
localStorage.setItem('history', JSON.stringify(history));
}
// 恢复历史记录
function restoreHistory(timestamp) {
const history = getHistory();
for (let i = 0; i < history.length; i++) {
if (history[i].timestamp === timestamp) {
const noteInput = document.getElementById('note-input');
noteInput.value = history[i].noteText;
break;
}
}
}
// 获取标签列表
function getTags() {
const tags = JSON.parse(localStorage.getItem('tags'));
if (tags) {
return tags;
} else {
return [];
}
}
// 添加标签
function addTag(noteId, tag) {
const tags = getTags();
if (!tags[noteId]) {
tags[noteId] = [];
}
tags[noteId].push(tag);
localStorage.setItem('tags', JSON.stringify(tags));
}
// 移除标签
function removeTag(noteId, tag) {
const tags = getTags();
if (tags[noteId]) {
tags[noteId] = tags[noteId].filter(t => t !== tag);
localStorage.setItem('tags', JSON.stringify(tags));
}
}
// 过滤和搜索笔记
function filterNotes() {
const tagInput = document.getElementById('tag-input');
const tag = tagInput.value.toLowerCase();
const notes = document.querySelectorAll('.note');
notes.forEach(note => {
const noteTags = getTags()[note.id];
if (noteTags) {
const hasTag = noteTags.some(t => t.toLowerCase().includes(tag));
note.style.display = hasTag ? '' : 'none';
} else {
note.style.display = 'none';
}
});
}
// 导出笔记为文本文件
function exportNotes() {
const notes = document.querySelectorAll('.note');
const noteTexts = notes.map(note => note.textContent);
const blob = new Blob([noteTexts.join('\n')], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'notes.txt';
link.click();
}
// 导入笔记从文本文件
function importNotes() {
const input = document.createElement('input');
input.type = 'file';
input.accept = 'text/plain';
input.addEventListener('change', function() {
const file = input.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
const noteTexts = e.target.result.split('\n');
const notes = document.querySelectorAll('.note');
for (let i = 0; i < noteTexts.length; i++) {
if (noteTexts[i]) {
const noteInput = notes[i].querySelector('textarea');
noteInput.value = noteTexts[i];
}
}
};
reader.readAsText(file);
} else {
alert('请选择一个文本文件!');
}
});
input.click();
}
// 获取历史堆栈
function getHistoryStack() {
return JSON.parse(localStorage.getItem('historyStack')) || [];
}
// 添加历史记录到堆栈
function addHistoryEntry(noteId, noteText, timestamp) {
const historyStack = getHistoryStack();
historyStack.push({ noteId, noteText, timestamp });
localStorage.setItem('historyStack', JSON.stringify(historyStack));
}
// 撤销更改
function undoChange() {
const historyStack = getHistoryStack();
if (historyStack.length > 0) {
const lastEntry = historyStack[historyStack.length - 1];
const noteInput = document.getElementById(lastEntry.noteId);
noteInput.value = lastEntry.noteText;
historyStack.pop();
localStorage.setItem('historyStack', JSON.stringify(historyStack));
}
}
// 重做更改
function redoChange() {
const historyStack = getHistoryStack();
if (historyStack.length > 1) {
const secondLastEntry = historyStack[historyStack.length - 2];
const noteInput = document.getElementById(secondLastEntry.noteId);
noteInput.value = secondLastEntry.noteText;
historyStack.pop();
localStorage.setItem('historyStack', JSON.stringify(historyStack));
}
}
// 添加键盘事件监听器
document.addEventListener('keydown', function(e) {
const key = e.key;
const noteInput = document.querySelector('.note input');
if (noteInput && (key === 'Control' || key === 'Command')) {
// 保存笔记的快捷键
if (e.ctrlKey && e.which === 83) {
e.preventDefault();
saveNote();
}
// 撤销更改的快捷键
else if (e.ctrlKey && e.which === 8) {
e.preventDefault();
undoChange();
}
// 重做更改的快捷键
else if (e.ctrlKey && e.which === 9) {
e.preventDefault();
redoChange();
}
}
});
在这个示例中,我们使用addEventListener
函数添加了一个键盘事件监听器。当用户按下按键时,我们检查按下的键是否为“Control”或“Command”键,并执行相应的操作。如果用户按下“Control+S”组合键,我们调用saveNote
函数保存笔记;如果用户按下“Control+Z”组合键,我们调用undoChange
函数撤销更改;如果用户按下“Control+Y”组合键,我们调用redoChange
函数重做更改。请注意,这只是一个简单的示例代码,您可能需要根据您的应用程序的实际需求进行修改和扩展。
通过本篇博客,您已经学习了如何使用JavaScript创建一个简单的在线记事本。这个记事本允许用户输入文本,并能够保存和加载他们的笔记。这个应用使用了Web Storage API来存储和加载数据,使得数据在浏览器关闭后仍然保留。请注意,这只是一个简单的示例,您可以根据需要扩展和改进这个应用。