javascript 有谁能告诉我如何用vanilla js编写同样的代码吗?

dzhpxtsq  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(146)

任何人都可以将此jQuery代码更改为Vanilla JS。

当鼠标移到 Package 纸和卡片上时,我将显示卡片。当鼠标离开时,它将再次显示无。

<div class="wrapper" onmouseover="show(this);" onmouseleave="hide(this);">
    <div class="box"></div>
    <div class="card" onmouseover="show(this);" onmouseleave="hide(this);">
        <img
            src="img-2">
    </div>
</div>

<div class="wrapper" onmouseover="show(this);" onmouseleave="hide(this);">
    <div class="box"></div>
    <div class="card" onmouseover="show(this);" onmouseleave="hide(this);">
        <img
            src="img-1">
    </div>
</div>
function show(e) {
        $(e).find('.card').css('display','block');
    }
    function hide(e) {
        $(e).find('.card').css('display','none');
    }
5anewei6

5anewei61#

下面应该可以

function hide(el){
  el.querySelector(".card").style.display = "none";
}

function show(el){
  el.querySelector(".card").style.display = "block";
}

您也可以使用纯CSS来完成此操作:
x一个一个一个一个x一个一个二个x

3z6pesqy

3z6pesqy2#

JQuery的find是一个子元素选择器(因此您要查找的是您试图选择的实际元素的子元素)
所以根据你想要触发函数的元素,

// on clicked element
function show(el) { el.style.display = "block"; }

// on all siblings
function show(el) { 
    let elem=el.nextElementSibling; 
    while(elem){ $(elem).css('display', 'block'); elem=elem.nextElementSibling; }
    let elem=el.previousElementSibling; 
    while(elem){ $(elem).css('display', 'block'); elem=elem.previousElementSibling; }
}

// on siblings with class .card and itself
function show(el) { $(el.parentElement).find('.card').css('display', 'block'); }

// of children with class .card
function show(el) { $(el.parentElement).find('.card').css('display', 'block'); }

// You can also filter with standard operators. eg: el !== $(el.parentElement).find('.card')[0]

但在一天结束时,只需使用CSS选择器:例如:

.card:hover { display: none; }
.wrapper:hover .card { display: block; }
.wrapper:not(:hover) .card { display: none; }
 // and so on...

此外,我不是100%肯定显示:none和onMouse效果是兼容的,您应该尝试使用不透明度:0或类似的东西

nukf8bse

nukf8bse3#

必须对代码进行以下更改:

function show(element) {
  const cardElement = element.getElementsByClassName("card")[0];
  if (cardElement) {
    cardElement.style.display = 'block';
  }
}

function hide(element) {
  const cardElement = element.getElementsByClassName("card")[0];
  if (cardElement) {
    cardElement.style.display = 'none';
  }
}
.container {
  display: flex;
  flex-direction: row;
  gap: 10px;
}

.wrapper {
  width: 60px;
  height: 60px;
  background-color: #f00;
  display: block;
}

.card {
  display: none;
}
<div class="container">
    <div class="wrapper" onmouseover="show(this);" onmouseleave="hide(this);">
        <div class="box"></div>
        <div class="card">
            <img src="https://api.dicebear.com/5.x/fun-emoji/svg?seed=img-2">
        </div>
    </div>

    <div class="wrapper" onmouseover="show(this);" onmouseleave="hide(this);">
        <div class="box"></div>
        <div class="card">
            <img src="https://api.dicebear.com/5.x/fun-emoji/svg?seed=img-1">
        </div>
    </div>
</div>

您也可以只使用CSS来实现相同的效果:
一个三个三个一个

相关问题