首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用CSS或Javascript制作动画到伪类

用CSS或Javascript制作动画到伪类
EN

Stack Overflow用户
提问于 2015-10-29 07:13:37
回答 2查看 68关注 0票数 0

我做了Codepen上的一组社交按钮,用来分享东西。但我遇到了一些CSS或Javascript问题。我想得到的.sharer::before,它是菱形的,每个按钮的彩色背景,移动到顶部后,点击事件。

按钮的正常状态(小三角形是菱形背景的角)

在悬停状态下,按钮将填充整个菱形背景。

单击按钮后,菱形背景将飞到顶部。

在单击按钮后,我创建了一个.success类名以获得成功的状态,但是这个Javascript块似乎错了。我只想将.success添加到已经单击的.sharer中。(科德芬)

代码语言:javascript
运行
复制
function addSuccess(currentClass) { 
 document.getElementsByClassName(currentClass).classList.add("success");
}

document.getElementsByClassName("sharer").addEventListener("click", addSuccess("sharer"), false);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-29 08:19:42

要小心返回元素的getElementsByClassName数组,而在单个元素上应该调用addEventListener

如果您使用的是像jQuery这样的助手库,您就可以这样做,而不必担心操作了多少元素。

对于类似于您的示例中的香草元素,您应该迭代元素数组。

addSuccess函数中的另一个问题是:如何选择要应用新类success的特定元素?在添加迭代之后,它将盲目地将新类应用于每个元素。

最后,addEventListener将一个函数作为第二个参数,而不是一个表达式(就像带有参数的函数一样)。如果调用addSuccess("sharer")返回了一个函数,它就可以工作了。

由此产生的代码:

代码语言:javascript
运行
复制
function addSuccess(event) { 
    var clickedButton = event.target;
    clickedButton.classList.add("success");
}

var buttons = document.getElementsByClassName("sharer");

for(var i = 0; i < buttons.length; i += 1) {
    buttons[i].addEventListener("click", addSuccess, false);
}   

演示:http://codepen.io/anon/pen/PPeLRp

请注意,一旦添加了success类,您还缺少一个CSS规则将您的菱形粘贴到顶部。实际上,你的钻石只有在悬停时才能到达顶端。

缺少的规则是:

代码语言:javascript
运行
复制
.sharer.success::before {
    top: -208%;
}
票数 1
EN

Stack Overflow用户

发布于 2015-10-29 08:06:28

你需要的是:

代码语言:javascript
运行
复制
var shares = document.getElementsByClassName("sharer");

function addSuccess() {
  this.classList.add('success');
}

Array.prototype.forEach.call(shares, function(share) {
  share.addEventListener('click', addSuccess);
});

您的代码不能工作的原因是它使用所有元素和className 'share‘,并试图将事件侦听器添加到HTMLCollection本身。您需要的是将此事件侦听器添加到每个元素中。您可以通过forEach方法来完成这一任务,但这是数组对象的方法,因此您必须使用Array.prototype.forEach.call(shares, fn)- -这允许在HTMLCollection上使用HTMLCollection方法。

在提供的(function(share)),中,将每个元素作为参数fn传递,然后将事件侦听器添加到其中。在事件侦听器中的函数中,您可以访问它--它是一个元素,您在其中添加了事件。

为了更好的理解,我的答案不能提供,你可以看看MDN

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33407995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档