在javascript中仅选择当前单击(div)项

Posted

技术标签:

【中文标题】在javascript中仅选择当前单击(div)项【英文标题】:Selecting only the current click (div) item in javascript 【发布时间】:2017-09-22 22:47:36 【问题描述】:

我正在尝试实现网格系统,如果我单击其中一个 div,它会放大,而其他 div 会淡出。

如何分别选择这两个元素,以便

    当前点击 div 放大 其余元素淡出

var slider= $('.image_slide');

slider.on('click', function()

    slider.css('opacity', 0);

);
.slider_images
  height:200px;
  width:200px;


.image_slide
  padding:40px;
  display:block;
  background-color:#555; 
  width: 40%;
  margin-top:20px;
  color:white;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="slider_images>
           <a href= "#" class="image_slide">IMAGE 1 </a>
           <a href= "#" class="image_slide">IMAGE 2 </a>
           <a href= "#" class="image_slide">IMAGE 3 </a>
           <a href= "#" class="image_slide">IMAGE 4 </a>
        </div>

在这里,通过单击其中一个 div,我希望单击的 div 放大,而其他 div 消失。 javascript 和 Jquery 如何在选择其他元素进行其他交互的同时捕获当前的点击事件?

谢谢

【问题讨论】:

您可以发布您尝试过的代码以便我们进行故障排除吗? 请展示您尝试过的内容以及minimal reproducible example How do I animate a scale css property using jquery?的可能重复 【参考方案1】:

您可以为所有div 添加一个点击事件,并在点击事件中选择所有它们并让它们淡出。要获得被点击放大的那个,您可以使用this 选择它,然后恢复淡出并进行放大。

document.getElementsByTag("div").addEventListener("click", function() 
    var divs = document.getElementsByTag("div"); //This are all your divs
    divs.foreach(function() 
       this.classList.remove("zoom-in"); //Could be that a element is already zoomed in what have to be reseted first
       this.classList.add("fades-out"); //Or However you do your fade out
    
    this.classList.remove("fade-out");
    this.classList.add("zoom-in"); //Add your zoom effect
);

我假设您在本例中使用 css 制作动画。

【讨论】:

【参考方案2】:

您可以使用 css 和一点点 js 代码来实现它,而无需任何 jQuery。但是你可以使用 jQuery 特性来调整这段代码。

document.querySelectorAll(".item").forEach((element, n, all) => 
    element.addEventListener("click", () => 
        all.forEach(item => item.classList.remove("selected"))
        element.classList.add("selected");
    );
);
.container
  border: 2px solid black;
  display: inline-block;
  position: relative;


.item 
  display: inline-block;
  background: red;
  width: 80px;
  height: 80px;
  margin: 20px;
  transition: 1s;
  color: white;
  padding: 10px;
  opacity: 0.5;


.item.selected 
  transform: scale(1.3);
  opacity: 1;
  box-shadow: 0 0 10px black;
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>

请注意,querySelectorAllpointer-eventsclassList 在旧浏览器上可能不支持,但您可以使用旧 js 方法修复它。

【讨论】:

感谢您的回复,但在这里,您能否以这样的方式进行交互,一旦我点击其中一个 div,它会放大,而其他 div 会消失。

以上是关于在javascript中仅选择当前单击(div)项的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript从多个div中仅复制一个DIV到剪贴板

如何在 C# 或 JavaScript 的输入日期类型中仅启用当前日期

单击链接时如何使用 Javascript 更改部分 HTML?

单击上下文菜单项后验证当前 URL

在隐藏其他 div 时切换 div

集合视图 - 如何在每个部分中仅选择一个单元格