【问题标题】:Moving image on scroll through svg path通过 svg 路径滚动移动图像
【发布时间】:2017-03-29 06:51:43
【问题描述】:

我想通过滚动上的 svg 路径移动对象=)我试图将滚动上的部分路径添加到路径中,但它仍然不起作用。帮助!!!=) https://jsfiddle.net/YuriiBielozertsev/Ltx9ed0L/

<?xml version="1.0"?>
<svg viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Draw the outline of the motion path in grey, along with 2 small circles at key points -->
    <path d="M10,110 A120,120 -45 0,1 110 10 A120,120 -45 0,1 10,110" stroke="green" stroke-width="2" fill="none" id="theMotionPath"/>
        <circle cx="10" cy="110" r="3" fill="#000"/>
        <circle cx="110" cy="10" r="3" fill="#000"/>

        <!-- Red circle which will be moved along the motion path. -->
        <circle cx="0" cy="" r="5" fill="red">

        <!-- Define the motion path animation -->
        <animateMotion dur="6s" repeatCount="indefinite">
            <mpath xlink:href="#theMotionPath"/>
        </animateMotion>
    </circle>
</svg>

【问题讨论】:

  • 嗨。可悲的是,您的问题太模糊了,这就是您获得或将获得否决票的原因。获得答案的最快途径是转到jsfiddle.net 并设置该问题的工作演示。然后我们可以快速检查它,而不必浪费时间猜测。将指向小提琴的链接发布在您的答案中,您将获得更好的回复。

标签: javascript jquery html svg svg-animate


【解决方案1】:

这样的?

这是如何工作的:

  1. 当我们收到滚动事件时:
  2. 计算我们在页面下方的距离
  3. 使用&lt;path&gt; 元素函数getTotalLength()getPointAtLength() 将此百分比转换为路径上的位置。
  4. 重新定位点,使其出现在这一点上。

function positionTheDot() {

  // What percentage down the page are we? 
  var scrollPercentage = (document.documentElement.scrollTop + document.body.scrollTop) / (document.documentElement.scrollHeight - document.documentElement.clientHeight);

  // Get path length
  var path = document.getElementById("theMotionPath");
  var pathLen = path.getTotalLength();
  
  // Get the position of a point at <scrollPercentage> along the path.
  var pt = path.getPointAtLength(scrollPercentage * pathLen);
  
  // Position the red dot at this point
  var dot = document.getElementById("dot");
  dot.setAttribute("transform", "translate("+ pt.x + "," + pt.y + ")");
  
};

// Update dot position when we get a scroll event.
window.addEventListener("scroll", positionTheDot);

// Set the initial position of the dot.
positionTheDot();
.verylong {
  height: 2000px;
}

svg {
  position: fixed;
  width: 200px;
  height: 200px;
}
<svg viewBox="0 0 120 120" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
    <!-- Draw the outline of the motion path in grey, along with 2 small circles at key points -->
    <path d="M10,110 A120,120 -45 0,1 110 10 A120,120 -45 0,1 10,110" stroke="green" stroke-width="2" fill="none" id="theMotionPath"/>
    <circle cx="10" cy="110" r="3" fill="#000"/>
    <circle cx="110" cy="10" r="3" fill="#000"/>

    <!-- Red circle which will be moved along the motion path. -->
    <circle cx="0" cy="0" r="5" fill="red" id="dot"/>
</svg>

<div class="verylong">
</div>

【讨论】:

  • thnks=) 是否可以旋转对象?如果它不圆(像苍蝇一样)codecode 像这样
  • 您可以使用getPointAtLength() 来获得比当前点稍晚的点。然后使用这两个坐标点计算绘制“苍蝇”的角度。
猜你喜欢
  • 2021-10-27
  • 1970-01-01
  • 2012-05-22
  • 2021-08-16
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2021-05-01
  • 2011-08-20
相关资源
最近更新 更多