【问题标题】:change clip path smoothly on scroll滚动时平滑更改剪辑路径
【发布时间】:2018-05-20 03:42:37
【问题描述】:
<script>     
$("flexbox.center").scroll(changeClass);

function changeClass() {
    if($("#coverphoto").hasClass('.coverphoto')){
        $("#coverphoto").removeClass("coverphoto").addClass("newshape");
    }
    else{
        $("#coverphoto").removeClass("newshape").addClass("coverphoto");
    }
}       
 </script>


clip-path: polygon(0% 0%, 100% 0%, 100% 38.5%, 28.5% 65%, 0 65%);
transition: 0.5s ease-in-out;
-----
clip-path: polygon(0% 0%, 100% 0%, 100% 53%, 41% 53%, 0 53%);
transition: 0.5s ease-in-out;

你好,

我的目标是在滚动时平滑地更改剪切图像的形状。 我的方法是简单地在滚动的两个 css 属性之间切换,但这不起作用。 (顺便说一句,这与 :hover 在初始 css 属性上完美配合)

任何提示都非常感谢,对我来说意义重大!

【问题讨论】:

    标签: javascript jquery css animation clip-path


    【解决方案1】:

    你的代码有错误,hasClass() 函数没有选择器,只有类名:

    function changeClass() {
      if ($("#cover").hasClass('coverphoto')) {
        $("#cover").removeClass("coverphoto").addClass("newshape");
      } else {
        $("#cover").removeClass("newshape").addClass("coverphoto");
      }
    }
    .coverphoto {
      clip-path: polygon(0% 0%, 100% 0%, 100% 38.5%, 28.5% 65%, 0 65%);
      transition: 0.5s ease-in-out;
    }
    
    .newshape {
      clip-path: polygon(0% 0%, 100% 0%, 100% 53%, 41% 53%, 0 53%);
      transition: 0.5s ease-in-out;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="cover" class="coverphoto">
      <img src="https://lorempixel.com/400/150/">
    </div>
    <button onClick="changeClass()">change</button>

    顺便说一句,您可以通过简单地使用 toggleClass() 来优化您的逻辑:

    function changeClass() {
      $("#cover").toggleClass("newshape");
    }
    .coverphoto {
      clip-path: polygon(0% 0%, 100% 0%, 100% 38.5%, 28.5% 65%, 0 65%);
      transition: 0.5s ease-in-out;
    }
    
    .newshape {
      clip-path: polygon(0% 0%, 100% 0%, 100% 53%, 41% 53%, 0 53%);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="cover" class="coverphoto">
      <img src="https://lorempixel.com/400/150/">
    </div>
    <button onClick="changeClass()">change</button>

    这里是滚动事件的触发器:

    $(document).scroll(function() {
      if ($(window).scrollTop() <= 150) {
        $("#cover").removeClass("newshape");
      } else {
        $("#cover").addClass("newshape");
      }
    });
    body {
      height: 150vh;
    }
    
    .coverphoto {
      position: fixed;
      clip-path: polygon(0% 0%, 100% 0%, 100% 38.5%, 28.5% 65%, 0 65%);
      transition: 0.5s ease-in-out;
    }
    
    .newshape {
      clip-path: polygon(0% 0%, 100% 0%, 100% 53%, 41% 53%, 0 53%);
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="cover" class="coverphoto">
      <img src="https://lorempixel.com/400/150/">
    </div>

    【讨论】:

    • 非常感谢您的帮助!是否可以从 onclick 更改为滚动触发事件?
    • @Jakob 是的,你可以;)我在我的答案中添加了一个例子......但是一个非常简单的例子,你必须根据你的需要进行调整
    • 完美:)!但这仍然不适用于特定 div 的滚动:/ 我不知道为什么.. 但没关系,有时我会发现。再次感谢您的帮助
    • 正如我所说 :D 我想出了如何在 div 的滚动上产生这种效果...我只需要在我的代码中将脚本定位得更远一些:)
    • 您是否知道如何仅在向下滚动时触发滚动事件,而在滚动回顶部时再次反转整个事件?比如我会使用toggleClass。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多