0
私はreactとreduxで作業していますが、私はレデューサーを作成しようとして問題に直面しています。基本的に、divのリストがあります。私がdivをクリックすると、Z-インデックス階層を維持しながら、より高いインデックスになるようにZ-インデックスを更新したいと思います。Zインデックススタックを扱うためのレデューサーの作成方法
はフィドルを参照してください: https://jsfiddle.net/pablodarde/mvv6chz3/
changeStack
機能は私の減速のようなものです。
ここでは、notes
配列を上位のインデックス(最後の要素、上位のインデックス)で並べ替えるようにしたいだけです。事前に
おかげ
HTML
<div id="container">
</div>
はJavaScript
let notes = [
{
id: 'one',
label: 'One',
},
{
id: 'two',
label: 'Two',
},
{
id: 'three',
label: 'Three',
},
{
id: 'four',
label: 'Four',
},
];
const list = document.querySelector('#container');
notes.map((item) => {
const elem = document.createElement('div');
elem.id = item.id;
elem.innerHTML = item.label;
list.appendChild(elem);
});
const btn1 = document.querySelector('#one');
const btn2 = document.querySelector('#two');
const btn3 = document.querySelector('#three');
const btn4 = document.querySelector('#four');
btn1.addEventListener('click', function(e) {
changeStack(e.target.id);
});
btn2.addEventListener('click', function(e) {
changeStack(e.target.id);
});
btn3.addEventListener('click', function(e) {
changeStack(e.target.id);
});
btn4.addEventListener('click', function(e) {
changeStack(e.target.id);
});
function changeStack(id) {
let index = notes.length - 1;
notes = notes.map((item, idx) => {
if (idx === notes.length - 1) {
console.log('last: ', idx);
return notes[index];
} else if (item.id == id) {
console.log('item.id == id: ', idx);
index = idx;
return notes[idx + 1];
} else if (item.id > id) {
console.log('item.id > id: ', idx);
return item;
} else {
console.log('else: ', idx);
return item;
}
});
console.log(notes);
}
CSS
body, html {
width: 100%;
height: 100%;
}
#container {
position: relative;
width: 100%;
height: 100%;
background: #ddd;
}
#one, #two, #three, #four {
position: absolute;
width: 120px;
height: 120px;
background: #990;
box-shadow: 2px 2px 2px rgba(0,0,0,.4);
border: 1px solid rgba(0,0,0,.4);
}
#one {
top: 0;
left: 0;
z-index: 10;
}
#two {
top: 40px;
left: 40px;
z-index: 20;
}
#three {
top: 80px;
left: 80px;
z-index: 30;
}
#four {
top: 120px;
left: 120px;
z-index: 40;
}