首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Css动画-显示/隐藏带有手写svg效果的徽标

Css动画-显示/隐藏带有手写svg效果的徽标
EN

Stack Overflow用户
提问于 2016-12-08 15:57:52
回答 1查看 317关注 0票数 1

我正在模拟一个svg的手写动画,当用户按住鼠标时会激活它。根据这个source,为了创造这一效果,我是重叠的标志与一个svg,这是标志本身的stroke线,我正在将颜色转向transparent来显示它。

徽标应在mousedown上显示,并通过以下脚本再次隐藏在mouseup上:

代码语言:javascript
复制
var logoElements = document.querySelectorAll('#first svg *');
var down = false;

function checkMousePosition() {
  for (i = 0; i < logoElements.length; i++) {
    if (down == true) {
      console.log(logoElements[i].getTotalLength());
      logoElements[i].classList.add("animation-forward");
      logoElements[i].classList.remove("animation-backward");
    } else {
      logoElements[i].classList.remove("animation-forward");
      logoElements[i].classList.add("animation-backward");
    }
  }
}

下面是一个具有完整代码的fiddle。这似乎是可行的,但目前我有以下问题:

  • console.log(logoElements[i].getTotalLength());抛出一个错误,说明它不是一个函数。
  • 标志应该隐藏在开始和被显示在点击,而不是反之亦然,责任是缓慢的。

你知道我做错了什么吗?

谢谢您的回复!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-08 17:33:42

首先,getTotalLength只工作宽度路径,因此您必须编写自己的函数来获取其他元素的长度或将它们转换为路径(应该很简单,因为它们只是行)。

然后使用这个js:

代码语言:javascript
复制
var logoElements = document.querySelectorAll('#first svg path');
for (i = 0; i < logoElements.length; i++) {
    logoElements[i].style["strokeDasharray"] = logoElements[i].getTotalLength();
    logoElements[i].style["strokeDashoffset"] = 0;
}

function checkMousePosition(down) {
  for (i = 0; i < logoElements.length; i++) {
    if (down) logoElements[i].style["strokeDashoffset"] = logoElements[i].getTotalLength();
    else logoElements[i].style["strokeDashoffset"] = 0;
  }
}

document.addEventListener('mousedown', function mouseState(e) {
  checkMousePosition(true);
});

document.addEventListener('mouseup', function mouseState(e) {
  checkMousePosition(false);
});

将例如transition: stroke-dashoffset 1s;添加到#first path

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

https://stackoverflow.com/questions/41043622

复制
相关文章

相似问题

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