返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js实现MaterialUI点击涟漪效果示例
  • 433
分享到

js实现MaterialUI点击涟漪效果示例

2024-04-02 19:04:59 433人浏览 薄情痞子
摘要

目录正文htmlCSSjs实现效果 正文 我个人而言还是挺喜欢Material UI这套设计风格的。一些细节方面做的还不错。就比如今天要给大家分享的点击涟漪效果。Mater

正文

我个人而言还是挺喜欢Material UI这套设计风格的。一些细节方面做的还不错。就比如今天要给大家分享的点击涟漪效果。Material UI里面叫做Ripples。好了,话不多说,开始吧。

HTML

<div class="example">Click me</div>

CSS

.example {
    position: relative;
    width: 300px;
    height: 300px;
    line-height: 300px;
    text-align: center;
    margin-top: 30px;
    box-shadow: 0 2px 4px -1px #0003, 0 4px 5px #00000024, 0 1px 10px #0000001f;
    overflow: hidden;
    cursor: pointer;
    user-select: none;
    -WEBkit-tap-highlight-color: transparent;
}
.ripple {
    position: absolute;
    border-radius: 50%;
    background-color: #0000001a;
    animation: ripple 225ms cubic-bezier(0, 0, .2, 1) forwards;
    transfORM: scale3D(0, 0, 0);
    pointer-events: none;
}
@keyframes ripple {
    from {
        transform: scale3d(0, 0, 0);
    }
    to {
        transform: scale3d(1, 1, 1);
    }
}

JS

const exampleEl = document.querySelector('.example');
// 移动端触发顺序 touchstart => touchend => mousemove => mousedown => mouseup => click
// 文档https://w3c.GitHub.io/touch-events/#mouse-events
let rippleEl = null, startTime, isMouseup = false;
// touchstart
function handleTouchstart(e) {
    createRipple(e);
}
// touchend
function handleTouchend(e) {
    removeRipple(e);
    // 阻止mouse事件触发
    e.preventDefault();
}
// touchcancel
function handleTouchcancel(e) {
    removeRipple(e);
}
// mousedown
function handleMousedown(e) {
    // 避免mouseup,mouseleave重复执行
    isMouseup = false;
    createRipple(e);
}
// mouseup
function handleMouseup(e) {
    isMouseup = true;
    removeRipple(e);
}
// mouseleave
function handleMouseleave(e) {
    if (isMouseup || rippleEl === null) {
        return;
    }
    removeRipple(e)
}
// 创建ripple
function createRipple(e) {
    startTime = e.timeStamp;
    const current = { x: e.clientX, y: e.clientY }
    if (e.type === 'touchstart') {
        current.x = e.touches[0].clientX;
        current.y = e.touches[0].clientY;
    }
    const rect = exampleEl.getBoundinGClientRect();
    const vertex = {
        nw: { x: rect.left, y: rect.top },
        ne: { x: rect.left + rect.width, y: rect.top },
        se: { x: rect.left + rect.width, y: rect.top + rect.height },
        sw: { x: rect.left, y: rect.top + rect.height }
    }
    let max = 0;
    for (const key in vertex) {
        // ripple半径
        const radius = getDistance({ x: current.x, y: current.y }, vertex[key]);
        max = Math.max(max, radius);
    }
    rippleEl = document.createElement('div');
    rippleEl.className = 'ripple';
    rippleEl.style.left = (current.x - rect.left - max) + 'px';
    rippleEl.style.top = (current.y - rect.top - max) + 'px';
    rippleEl.style.width = (max * 2) + 'px';
    rippleEl.style.height = (max * 2) + 'px';
    exampleEl.appendChild(rippleEl);
}
// 移除ripple
function removeRipple(e) {
    if (e.timeStamp - startTime > 225) {
        rippleEl.remove();
        rippleEl = null;
    } else {
        // 采用animation属性实现动画效果。相比transition的好处在于不用手动触发重绘
        rippleEl.addEventListener('animationend', function () {
            this.remove();
            if (this === rippleEl) {
                rippleEl = null;
            }
        });
    }
}
// 绑定事件
exampleEl.addEventListener('mousedown', handleMousedown);
exampleEl.addEventListener('mouseup', handleMouseup);
exampleEl.addEventListener('mouseleave', handleMouseleave);
exampleEl.addEventListener('touchstart', handleTouchstart);
exampleEl.addEventListener('touchend', handleTouchend);
exampleEl.addEventListener('touchcancel', handleTouchcancel);

function getDistance(a, b) {
    const x = a.x - b.x;
    const y = a.y - b.y;
    return Math.hypot(x, y); // Math.sqrt(x * x + y * y);
}

实现效果 

以上就是js 实现Material UI点击涟漪效果示例的详细内容,更多关于js Material UI点击涟漪效果的资料请关注编程网其它相关文章!

--结束END--

本文标题: js实现MaterialUI点击涟漪效果示例

本文链接: https://lsjlt.com/news/168076.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • js实现MaterialUI点击涟漪效果示例
    目录正文HTMLCSSJS实现效果 正文 我个人而言还是挺喜欢Material UI这套设计风格的。一些细节方面做的还不错。就比如今天要给大家分享的点击涟漪效果。Mater...
    99+
    2024-04-02
  • vue实现水波涟漪效果的点击反馈指令
    目录水波效果来看实现 定制一个水波纹默认样式 计算水波纹的位置和直径 鼠标按下时创建水波 鼠标抬起时销毁水波 通过指令binding去扩展你的水波选项 写在最后 水波效果 当用户点击...
    99+
    2024-04-02
  • css3怎么实现点击出现不同颜色涟漪特效
    本篇内容介绍了“css3怎么实现点击出现不同颜色涟漪特效”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!&l...
    99+
    2024-04-02
  • CSS+JS怎么实现水滴涟漪动画按钮效果
    这篇文章主要为大家展示了CSS+JS怎么实现水滴涟漪动画按钮效果,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“CSS+JS怎么实现水滴涟漪动画按钮效果”这篇文章吧。代码如下所示:<!DOCT...
    99+
    2023-06-08
  • 怎么在vue中实现水波涟漪效果的点击反馈指令
    这篇文章将为大家详细讲解有关怎么在vue中实现水波涟漪效果的点击反馈指令,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。定制一个水波纹默认样式水波纹实际上就是通过用户点击的位置生成一个小圆圈,...
    99+
    2023-06-15
  • 使用JavaScript实现按钮的涟漪效果实例代码
    目录前言分析实现总结前言 不知道你们有没有使用过 Material UI。这是一个 React UI 组件库,它实现了 Google 的 Material Design。 Mater...
    99+
    2022-11-13
    js实现按钮涟漪效果的方法 css 涟漪效果 js实现按钮涟漪转动
  • Javascript如何实现点击提示效果
    这篇文章主要介绍了Javascript如何实现点击提示效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Javascript如何实现点击提示效果文章都会有所收获,下面我们一起来看看吧。在电脑中新建一个HTML项...
    99+
    2023-07-04
  • Android 设置主题实现点击波纹效果的示例
    开头先说说大家都知道的Material Design。Material Design:Material Design是Google推出的一个全新的设计语言,它的特点就是拟物扁平化。Material Design包含了很多内容,我大致把它分为...
    99+
    2023-05-30
    android 水波纹 点击
  • 基于JS实现点击图片在弹出层显示大图效果
    Javascript是个好东西。 Jquery是基于这个好东西的一个强大的库。 今天要实现的功能是基于这两个玩意儿的。 点击图片,在弹出层显示原图。 大概效果是这样的: 上代码: ...
    99+
    2022-11-13
    JS弹出层显示大图 JS 显示大图 JS 大图
  • Android实现按钮点击效果
    1、首先创建一个按钮 <Button android:id="@+id/click" android:layout_width="fill_parent" androi...
    99+
    2022-06-06
    按钮 Android
  • vue实现点击翻转效果
    用vue简单实现一个点击翻转的效果,供大家参考,具体内容如下 1、 2、 3、 //html代码 测试 demo命名随便复制来的 <div class="Demo...
    99+
    2024-04-02
  • JS怎样实现图片点击后出现模态框效果
    这篇文章给大家分享的是有关JS怎样实现图片点击后出现模态框效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一.实现思路我们点击小图片之后,图片模态框出现,同时图片模态框上有一个...
    99+
    2024-04-02
  • jquery实现点击按钮显示与隐藏效果
    本文实例为大家分享了jquery实现点击按钮显示与隐藏的具体代码,供大家参考,具体内容如下 首先来看实现效果 用jquery来实现这种效果是非常简单的 html <div c...
    99+
    2024-04-02
  • iOS实现不规则Button点击效果实例代码
    需求 利用图片,实现一个如图的按钮组。 遇到的问题 如下图所示: 功能1、2、3、4的按钮可以实现点击功能。但是在红色方框四角的位置,也会响应相应的点击事件。 紫色方...
    99+
    2022-05-24
    ios 不规则 button
  • JS实现微信播音效果示例详解
    目录需要实现的效果图片切换轮播法CSS实现需要实现的效果 图片切换轮播法 这个功能其实是我刚毕业的时候实现的,那也是5年前的事情了,受限于当时的水平,仅仅是实现了,其他啥都不是。...
    99+
    2023-02-21
    JS微信播音效果 微信播音效果
  • JS实现图片翻书效果示例代码
    picture.html 复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <...
    99+
    2022-11-15
    JS 图片翻书
  • JavaScript如何实现点击出现效果
    本篇内容主要讲解“JavaScript如何实现点击出现效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript如何实现点击出现效果”吧! ...
    99+
    2024-04-02
  • Android实现水波纹点击效果
    Android实现水波纹点击效果只在Android5.0以上版本有效,水波纹点击效果代码供大家参考,具体内容如下 圆角背景的水波纹效果(如上图) 1. 定义一个普通圆角背景...
    99+
    2022-06-06
    Android
  • AndroidFlutter实现点赞效果的示例代码
    目录前言绘制小手完整源码前言 点赞这个动作不得不说在社交、短视频等App中实在是太常见了,当用户手指按下去的那一刻,给用户一个好的反馈效果也是非常重要的,这样用户点起赞来才会有一种强...
    99+
    2024-04-02
  • js如何实现下拉菜单点击旁边收起效果
    这篇文章主要为大家展示了“js如何实现下拉菜单点击旁边收起效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js如何实现下拉菜单点击旁边收起效果”这篇文章吧。演...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作