【发布时间】:2021-05-20 23:06:14
【问题描述】:
我有一个包含图片和文字的响应式网页,旨在在移动设备上查看。我想添加视觉效果,这样每当用户触摸或点击页面时,接触点就会发生一些事情(例如波纹或扩大的圆圈)。
理想情况下,我可以将一堆不同的视觉效果放在一个 CSS 文件中,然后通过将效果对应的类添加到页面来选择我想要的效果。
我已经可以在 JavaScript 中检测到点击和触摸并知道它们的坐标,我只是不知道如何在坐标上产生效果。
以下网站在空白页Andrew Gilmore 上执行我想要的操作。不幸的是,它使用 jQuery 和其他各种库,我追求纯 JavaScript 和 CSS。我不知道足够的 jQuery 来转译为 JavaScript。
以下网站 Mary Lou 有一个很好的效果库,嵌入在 htmls <style> 元素中(点击“查看演示”)。不幸的是,效果与按钮相关联,而不是屏幕位置点击和触摸,我试图让它们在屏幕上工作的尝试失败了。
基于 Andrew Gilmore 的 codepen。
HTML
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>CodePen - Click/Touch Visual Feedback</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css">
<link rel="stylesheet" href="./style.css">
</head>
<body>
<div id="ping"></div>
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
<script src='https://cdn.jsdelivr.net/velocity/1.1.0/velocity.min.js'></script>
<script src="./script.js"></script>
</body>
</html>
CSS
#ping {
background-size: 100%;
background-image: -moz-radial-gradient(center, ellipse cover, rgba(228, 245, 252, 0) 0%, rgba(191, 232, 249, 0.45) 30%, #72cbf3 66%, rgba(112, 202, 243, 0) 67%, rgba(42, 176, 237, 0) 100%);
background-image: -webkit-radial-gradient(center, ellipse cover, rgba(228, 245, 252, 0) 0%, rgba(191, 232, 249, 0.45) 30%, #72cbf3 66%, rgba(112, 202, 243, 0) 67%, rgba(42, 176, 237, 0) 100%);
background-image: radial-gradient(ellipse cover at center, rgba(228, 245, 252, 0) 0%, rgba(191, 232, 249, 0.45) 30%, #72cbf3 66%, rgba(112, 202, 243, 0) 67%, rgba(42, 176, 237, 0) 100%);
position: absolute;
height: 0;
width: 0;
opacity: 0;
}
而她就是我想翻译成纯 JavaScript 的 jQuery plus velocity.js。
jQuery
(function($){
var $ping = $('#ping');
$(document).on('touchstart click', function(e){
e.stopPropagation();
e.preventDefault();
$ping.velocity({
opacity: 1,
width: 100,
height: 100
},
{
easing: 'easeIn',
duration: 300,
begin: function(event, elements) {
$(elements).css({
display: 'block',
width: 0,
height: 0,
top: e.clientY || e.originalEvent.touches[0].pageY,
left: e.clientX || e.originalEvent.touches[0].pageX,
transform: 'translate(-50%, -50%)'
});
}.bind(null, e)
}).velocity({
opacity: 0,
width: 200,
height: 200
},
{
easing: 'linear',
duration: 300,
delay: 250,
queue: false,
complete: function(elements) {
$(elements).css({
display: 'none'
});
}
});
});
})(jQuery);
我的 JavaScript 和 CSS 技能一般,所以让我开始的简化工作答案足以让我解决其余的问题。给定坐标,我如何在它们上产生视觉效果?
【问题讨论】:
-
对不起,我们只是给你代码通常是不受欢迎的。预计您至少可以提供一个尝试执行此操作但失败的基本代码。然后,我们可以帮助您修复代码以使其正常工作,但是从头开始创建东西通常在这里是题外话。您说您已经对此进行了尝试,因此请提供其中一种尝试,以便我们查看并尝试帮助您。总而言之,我只是要求您帮助我们,帮助您。
-
velocityjs.org 也可以在没有 jquery 的情况下工作。
标签: javascript css