2 回答
TA贡献2037条经验 获得超6个赞
通过继续挖掘,我找到了答案。这比我想象的要简单得多。由于在鼠标悬停在卡片上时希望获得平滑的动画效果,因此我使用了CSS过渡和变换属性。
通过创建以下CSS类:
.card {
position: absolute;
background: rgb(255, 255, 255);
height: 275px;
width: 200px;
box-shadow: -1px 0px 3px 1px rgba(0, 0, 0, 0.747);
transition: all .4s ease;
}
.card.left {
transform: translateX(-175px);
}
.card.right {
transform: translateX(175px);
}
我能够在“ mouseenter”和“ mouseover”事件侦听器中添加和删除事件侦听器,以获得所需的效果。
function handleEvent(evt) {
switch(evt.type) {
case "mouseenter":
this.cardMouseOver(evt);
break;
case "mouseout":
this.cardMouseOut(evt);
break;
default:
return;
}
}
function cardMouseOver(event) {
for (var i = 0; i < cards.length; i++) {
if (event.target == cards[i]) {
currentCard = i;
}
}
for (var i = 0; i < cards.length; i++) {
if (i < currentCard) {
if (!cards[i].classList.contains('left')) {
cards[i].classList.add('left');
}
} else if (i > currentCard) {
if (!cards[i].classList.contains('right')) {
cards[i].classList.add('right');
}
}
}
}
function cardMouseOut(event) {
for (var i = 0; i < cards.length; i++) {
if (i < currentCard) {
if (cards[i].classList.contains('right')) {
cards[i].classList.remove('right');
} else if (cards[i].classList.contains('left')) {
cards[i].classList.remove('left');
}
} else if (i > currentCard) {
if (cards[i].classList.contains('left')) {
cards[i].classList.remove('left');
} else if (cards[i].classList.contains('right')) {
cards[i].classList.remove('right');
}
} else {
if (cards[i].classList.contains('left')) {
cards[i].classList.remove('left');
} else if (cards[i].classList.contains('right')) {
cards[i].classList.remove('right');
}
}
}
}
凡卡是“卡”元素的数组。
添加回答
举报