带拉绳的按钮

news2024/12/25 14:37:14

看看效果:
在这里插入图片描述
再上代吗:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
  <script src="https://unpkg.co/gsap@3/dist/gsap.min.js"></script>
  <script src="https://assets.codepen.io/16327/MorphSVGPlugin3.min.js"></script>
  <style>
    body {
      margin: 0;
      height: 100vh;
      width: 100vw;
      overflow: hidden;
      display: flex;
      justify-content: center;
      align-items: center;
      background: #1a2031;
    }

    * {
      box-sizing: border-box;
    }

    .btnContainer {
      width: 320px;
      height: 160px;
      position: relative;
    }

    .btn {
      position: absolute;
      left: 0;
      top: 0;
      bottom: 0;
      right: 0;
      background: #3c3459;
      border-radius: 999px;
      padding: 10px;
      cursor: pointer;
    }

    .knob {
      width: 140px;
      height: 140px;
      position: relative;
    }

    .top {
      background-color: #827d96;
      border-radius: 999px;
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
    }

    .light {
      border-radius: 999px;
      position: absolute;
      width: 100px;
      height: 100px;
      background: radial-gradient(
              50% 50% at 50% 50%,
              #4cc3e2 10.42%,
              rgba(94, 199, 227, 0.791579) 27.08%,
              rgba(113, 204, 229, 0.35) 45.31%,
              rgba(144, 213, 231, 0.11) 65.1%,
              rgba(158, 216, 231, 0.02) 78.12%,
              rgba(177, 221, 233, 0) 95.83%
      );
      left: 50%;
      top: 50%;
      transform: translate(-50%, -50%);
    }

    .hidden {
      visibility: hidden;
    }

    svg {
      position: absolute;
      bottom: 200px;
      left: 0;
      top: 90%;
    }

    .no-highlight {
      /* bad for accessibility - please don't use this in real world applications */
      -webkit-tap-highlight-color: transparent;
      -webkit-touch-callout: none;
      -webkit-user-select: none;
      -khtml-user-select: none;
      -moz-user-select: none;
      -ms-user-select: none;
      user-select: none;
    }

  </style>
</head>
<body>
<div class="btnContainer">
  <svg width="100" height="220" viewBox="0 0 100 220" fill="none" xmlns="http://www.w3.org/2000/svg">
    <path id="rope" d="M50 0V130" stroke="#333842" stroke-width="6" />
    <path id="rope-original" d="M50 0V130" stroke="black" stroke-width="1" class="hidden" />
    <path id="rope-extended" d="M50 0V170" stroke="black" stroke-width="1" class="hidden" />
    <path id="rope-compressed" d="M50.6794 99.5395C50.6794 99.5395 51.0304 93.3539 50.6794 89.416C49.698 78.405 40.6105 73.7631 41.2462 62.7267C42.1339 47.3139 63.6882 46.1634 64.4843 30.7456C65.1561 17.7347 50.6794 0.375 50.6794 0.375" stroke="black" stroke-width="1" class="hidden" />
    <path id="rope-end" d="M39.282 5.16623C39.9597 1.92197 42.8198 -0.402344 46.134 -0.402344H54.756C58.1211 -0.402344 61.01 1.99207 61.6344 5.29871L68.4328 41.2987C69.2468 45.6092 65.941 49.5977 61.5544 49.5977H38.6135C34.1717 49.5977 30.8531 45.5141 31.7614 41.1662L39.282 5.16623Z" transform="matrix(1,0,0,1,0,120)" fill="#3B2898" />
  </svg>
  <div class="btn no-highlight" id="btn">
    <div class="knob no-highlight">
      <div class="light no-highlight"></div>
      <div class="top no-highlight"></div>
    </div>
  </div>
</div>
</body>
<script>
  let isChecked = false;

  function onBtnDown() {
    const tl = gsap.timeline();
    tl.to("#rope-end", { duration: 0.2, y: 160 }, "start");
    tl.to("#rope", { duration: 0.2, morphSVG: "#rope-extended" }, "start");
  }

  function onBtnUp() {
    const tl = gsap.timeline();
    tl.to(
            "#rope",
            { duration: 0.4, morphSVG: "#rope-compressed", ease: "bounce.out" },
            "up"
    );
    tl.to(
            "#rope",
            { duration: 0.2, morphSVG: "#rope-original", ease: "bounce.out" },
            "down"
    );
    tl.to("#rope-end", { duration: 0.4, y: 90, ease: "bounce.out" }, "up");
    tl.to("#rope-end", { duration: 0.2, y: 120, ease: "bounce.out" }, "down");

    isChecked = !isChecked;

    let x = 0;
    let backgroundColor = "#827D96";
    let size = "100px";

    if (isChecked) {
      x = 160;
      backgroundColor = "#FFFFFF";
      size = "500px";
    }

    tl.to(".knob", { x, duration: 1 }, "up");
    tl.to(".top", { backgroundColor, duration: 1 }, "up");
    tl.to(".light", { width: size, height: size, duration: 1 }, "up");
  }

  const btn = document.getElementById("btn");
  btn.addEventListener("mousedown", onBtnDown);
  btn.addEventListener("mouseup", onBtnUp);

</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/547223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可视区域兼容性问题的思考及方法封装

今日在复习可视化尺寸获取时突发奇想&#xff0c;为什么要在怪异模式下使用document.body.clientWidth&#xff0c;在标准模式下使用document.documentElement.clientWidth&#xff1f;以及是否在IE8及以下的版本中其中一个获取方式将返回undefined或0。  出于该问题的思考&am…

C++的cin详解

2023年5月20日&#xff0c;周六早上&#xff1a; 我发现我找不到非常详细的cin类的成员函数&#xff0c;只好自己写了。 不定期更新。 cin的继承关系 cin类继承自istream类&#xff0c;ostream类继承自ios类&#xff0c;ios类继承自ios_base类 cin类拥有的所有成员函数 1. …

【算法题】2352. 相等行列对

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你一个下标从 0 开始、大小为 n …

ChatGPT 推出 iOS 应用,支持语音输入,使用体验如何?

最近&#xff0c;OpenAI 宣布推出官方 iOS 应用&#xff0c;允许用户随时随地访问其高人气 AI 聊天机器人&#xff0c;此举也打破了近几个月内苹果 App Store 上充斥似是而非的山寨服务的窘境。 该应用程序是 ChatGPT 的首个官方移动应用程序。ChatGPT 软件程序在去年推出后迅速…

Inertial Explorer处理pospac数据总结

Inertial Explorer处理pospac数据的过程包括&#xff1a;1&#xff09;从pospac提取出gps数据和imu数据&#xff1b;2&#xff09;gps数据转成rinex格式&#xff1b;3)imu数据转成imr格式&#xff1b;4&#xff09;IE对gps数据进行PPP解算&#xff1b;5&#xff09;紧耦合融合解…

帆软FineReport之版本升级

最近有个需求是将帆软报表版本从9升级到10&#xff0c;记录升级过程&#xff0c;方便备查。 前置条件&#xff1a;服务器上帆软10部署成功 版本区别 fineReport 9.0 http://IP:Port/WebReport/ReportServer?reportletabc.cpt fineReport 10.0 http://IP:Port/webroot/decision…

biopython: runningtime:generator didnot stop after throw

在运行某个蛋白【3NPS】的时候出现报错: 代码: parse=PDBParse(QUIET=True) structure=parser.get_structure(X,pdb) 报错: runningtime:generator didnot stop after throw 解决: (1)检查是否biopython版本和python 版本不一致: Biopython 支持多个 Python 版本…

第一章:VMware 虚拟机安装

Linux 的开发需要在 Linux 系统下进行&#xff0c;这就要求我们的 PC 主机安装 Linux 系统&#xff0c;本篇我 们选择 Ubuntu 这个 Linux 发行版系统。本篇讲解如何安装虚拟机&#xff0c;以及如何在虚拟机中安装 Ubuntu 系统&#xff0c;安装完成以后如何做简单的设置。如…

Android大作业(三)——修改应用图标

Android大作业&#xff08;三&#xff09;——修改应用图标 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在Android studio开发安卓应用时&#xff0c;工程中带有默认应用图标。安卓的图标有圆角、方形、高低像素的不同版本&#x…

这就是冒泡排序,像可乐中的气泡滋滋向上冒一样(44)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是冒泡排序&#xff1f; 用Python写段代码&#xff0c;实现冒泡排序。 冒泡排序 冒泡排序(Bubble Sort)是一种…

springboot+jsp高校社交校友交流平台的设计与实现

在学校里我们结识了很多朋友。当我们毕业离校走上各自的人生道路&#xff0c;这份友谊将成为宝贵的人生精神财富。但世事变迁&#xff0c;或许我们原本留下的联系方式已经不能再用&#xff0c;使得朋友之间失去联系&#xff0c;更别提相聚&#xff0c;这份精神财富也将丢失。这…

一文会用断码屏

断码屏的使用 1、断码屏显示文字原理 我理解应该是偏压原理达到显示效果的。 LCD驱动分为A型、B型&#xff0c;如果LCD偏压类型为C型&#xff0c;固定为 1/3 偏压。 由数据手册得知&#xff0c;以下&#xff1a; LCD 驱动器提供的 COM 和 SEG 输出数目&#xff0c;以及偏压…

【运维知识进阶篇】集群架构-Nginx四层负载均衡详解

四层负载均衡含义及应用场景 四层负载均衡是基于传输层协议包来封装的&#xff08;如&#xff1a;TCP/IP&#xff09;&#xff0c;那我们介绍的的七层是指的应用层&#xff0c;他的组装在四层的基础之上&#xff0c;无论四层还是七层都是指的OSI网络模型。我们之前介绍了七层负…

LabVIEWCompactRIO 开发指南24 第5章通过LabVIEW FPGA定制硬件

LabVIEWCompactRIO 开发指南24 第5章通过LabVIEW FPGA定制硬件 本章将介绍了一些练习&#xff0c;以及使用LabVIEW FPGA模块和CompactRIO开发高性能控制和监测系统的高级技巧和技巧。它介绍了推荐的编程实践、避免常见错误方法以及创建快速、高效且可靠的LabVIEW FPGA应用程序…

什么是跨链交易?

每个区块链都是一个完整的数字环境&#xff0c;其中所有应用程序都通过底层网络连接。但随着区块链网络的不断增加&#xff0c;以及区块链之间缺乏连接&#xff0c;人们对跨链基础设施的需求越来越高&#xff0c;以提供用户在多个区块链网络之间的互操作性。 没有跨链基础设施&…

23种设计模式之享元模式(Flyweight Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的享元模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

【SAM系列】SAM Enhanced Pseudo Labels for Weakly Supervised Semantic Segmentation

论文链接&#xff1a;https://arxiv.org/abs/2305.05803 论文代码&#xff1a;https://github.com/cskyl/sam_wsss 目的 探索如何结合SAM在image-level supervision下改善WSSS的性能 结论 可以在 seed maks&#xff0c;pseudo label&#xff0c;prediction三处结合SAM来改善…

opencv图像分割

图像分割是指把一个图像分成不同的部分&#xff0c;用来处理图像的技术。在计算机视觉中&#xff0c;图像分割是指将图像从背景中分离出来的技术&#xff0c;或称目标检测或目标识别。分割后的结果是将不同区域划分为不同的像素。 在很多情况下&#xff0c;需要对一幅图像进行分…

深度相机如何标定?(代码开源)

文章&#xff1a;Robust Intrinsic and Extrinsic Calibration of RGB-D Cameras 作者&#xff1a;Filippo Basso, Emanuele Menegatti, and Alberto Pretto. 编译&#xff1a;点云PCL 代码&#xff1a; https://github.com/iaslab-unipd/rgbd_calibration 欢迎各位加入知识星球…

Servlet API 获取请求数据

目录 一. 构造HTTP请求的方式1.1 使用 Postman 来构造请求1.2 使用ajax 来构造请求 二 . HttpServletRequest API使用api实现前后端交互1 . 通过 GET 请求 query string 进行传参2 . POST请求 form 表单传参 &#xff08;body&#xff09;3 . Post 请求的 json 格式的数据传参&…