实现h5、css3便签列表如下所示,要求第一次打开便签页面时,判断localStorage是否存储有便签数据,便签本地存储可以认为存储在localStorage['note'],若localStorage['note']没有数据先通过js将便签数组数据存储到localStorage['note'],若存在数据,则从localStorage取出数据渲染到页面上,通过nth-child选择器实现对便签的背景色和字体颜色控制,标签有旋转、阴影效果,并且鼠标箭头移上便签时有相应过渡显示效果
时间: 2024-02-21 22:58:13 浏览: 90
HTML5+CSS3实现便签效果(倾斜+动画)
5星 · 资源好评率100%
好的,这是一个比较具体的问题,我可以根据你的要求给出一个实现的思路:
1.首先判断 localStorage 中是否有便签数据,如果没有则先创建一个空数组,然后将其转换为字符串存储在 localStorage 中。
```javascript
if (!localStorage.getItem('note')) {
let noteArr = [];
localStorage.setItem('note', JSON.stringify(noteArr));
}
```
2.如果 localStorage 中已经有了便签数据,那么我们需要将其取出并渲染到页面上。可以使用 `JSON.parse()` 方法将字符串转换为数组,然后遍历数组,生成对应的便签元素并添加到页面上。
```javascript
let noteArr = JSON.parse(localStorage.getItem('note'));
let noteList = document.querySelector('.note-list');
noteArr.forEach((note, index) => {
let noteItem = document.createElement('div');
noteItem.classList.add('note-item');
noteItem.innerHTML = `<textarea>${note}</textarea>`;
noteItem.style.background = `hsl(${index * 30}, 70%, 80%)`;
noteItem.style.color = `hsl(${index * 30}, 70%, 20%)`;
noteList.appendChild(noteItem);
});
```
3.使用 nth-child 选择器控制便签的背景色和字体颜色,可以根据便签在数组中的索引计算出对应的颜色。
4.为便签添加旋转和阴影效果,可以使用 CSS3 的 transform 和 box-shadow 属性。
5.为便签添加鼠标移上时的过渡效果,可以使用 CSS3 的 transition 属性。
下面是一个可能的实现:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Note List</title>
<style>
.note-list {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
height: 100vh;
background: #f5f5f5;
}
.note-item {
position: relative;
margin: 10px;
padding: 20px;
width: 200px;
height: 200px;
border-radius: 10px;
transform: rotate(-5deg);
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3);
transition: all 0.3s ease-in-out;
cursor: pointer;
}
.note-item:hover {
transform: rotate(0deg) scale(1.1);
box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);
}
.note-item textarea {
width: 100%;
height: 100%;
font-size: 16px;
font-family: sans-serif;
outline: none;
border: none;
resize: none;
background: transparent;
color: inherit;
box-sizing: border-box;
}
.note-item:nth-child(2n) {
transform: rotate(5deg);
box-shadow: -5px 5px 10px rgba(0, 0, 0, 0.3);
}
.note-item:nth-child(2n):hover {
transform: rotate(0deg) scale(1.1);
box-shadow: -10px 10px 20px rgba(0, 0, 0, 0.5);
}
</style>
</head>
<body>
<div class="note-list"></div>
<script>
if (!localStorage.getItem('note')) {
let noteArr = [];
localStorage.setItem('note', JSON.stringify(noteArr));
}
let noteArr = JSON.parse(localStorage.getItem('note'));
let noteList = document.querySelector('.note-list');
noteArr.forEach((note, index) => {
let noteItem = document.createElement('div');
noteItem.classList.add('note-item');
noteItem.innerHTML = `<textarea>${note}</textarea>`;
noteItem.style.background = `hsl(${index * 30}, 70%, 80%)`;
noteItem.style.color = `hsl(${index * 30}, 70%, 20%)`;
noteList.appendChild(noteItem);
});
noteList.addEventListener('click', (event) => {
if (event.target.tagName === 'TEXTAREA') {
event.target.focus();
}
});
noteList.addEventListener('blur', (event) => {
if (event.target.tagName === 'TEXTAREA') {
let index = Array.from(event.target.parentNode.parentNode.children).indexOf(event.target.parentNode);
noteArr[index] = event.target.value;
localStorage.setItem('note', JSON.stringify(noteArr));
}
}, true);
</script>
</body>
</html>
```
希望能对你有所帮助!
阅读全文