<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
我個人而言還是挺喜歡Material UI這套設計風格的。一些細節方面做的還不錯。就比如今天要給大家分享的點選漣漪效果。Material UI裡面叫做Ripples。好了,話不多說,開始吧。
<div class="example">Click me</div>
.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); } }
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); /** * 獲取兩點間距離 * @param {object} a 第一個點座標 * @param {object} b 第二個點座標 * @returns */ 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點選漣漪效果的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45