这个特效笔者还真找不出什么特别贴切的标题来描述,直接看看效果图吧。哦对了,这个特效的灵感是笔者自己浏览一些网页的时候,鼠标点击,就会弹出或是文字或是图片,觉得新鲜就做了一个小的demo,还需完善,仅供参考。
效果图
简单的讲解
span {
position: absolute;
user-select: none;
font-size: 20px;
}
由于笔者采用span标签来包裹弹出的字,所有给它个绝对定位,不让用户选中(如果不这样,鼠标移到字上就会变形,难看),设置个字体大小。
JS部分,由于是用jQuery实现的,故要引入jQuery,网上太多教程了这里不多说。
var fontAll = [
'辛德拉',
'劫',
'卡萨丁',
'崔斯特',
'格雷福斯',
'安妮',
'阿木木',
'卡兹克',
'纳尔',
'德莱厄斯',
'德莱文',
'卡尔玛',
];
var colorAll = [
'red',
'pink',
'yellow',
'blue',
'aqua',
'green',
'gold',
'brown',
'grey',
'orange',
];
首先,你要定义两个数组,一个为弹出字体的内容,一个为弹出字体的颜色。定义两个数组是为了之后可以利用Math.random()随机选取颜色和内容。注意,弹出的字体不要太长,而且不要加与你网页背景色太过相近的颜色,显得很憨批。
$(document).click(function (e) {
var $span = $('<span>' + fontAll[Math.floor(Math.random() * fontAll.length)] + '</span>');
$('body').append($span);
$span.css('color', colorAll[Math.floor(Math.random() * colorAll.length)])
var width = $span.width()
var height = $span.height()
var init = e.pageY - height / 2;
$span.css({
left: e.pageX - width / 2 + 'px',
top: init + 'px'
});
$span.animate({
fontsize: 10 + 'px',
top: init - 150 + 'px',
opacity: .2
}, 1000, function () {
$span.css('display', 'none');
})
});
接下来就是重点了。先给document注册个点击事件,然后像上述格式一样定义一个jQuery对象并添加到body里面,再接着随机颜色。e.pageX,e.pageY为鼠标点击时,点击处距离窗口边框的x轴距离和y轴距离,可以通过定位的方式来把这个对象定位到鼠标处。这里要注意,这样生成的文字是以鼠标左上角为(0,0)的,有点像鼠标拖着文字呢,不好看。所以减去文字自身的宽高的一半,可以实现居中于鼠标的效果,animate()方法是jQuery中自定义动画用的,这里抄一下文档:
animate(params,[speed],[easing],[fn])
params,[speed],[easing],[fn]Options,Number/String,String,Function
params:一组包含作为动画属性和终值的样式属性和及其值的集合
speed:三种预定速度之一的字("slow","normal", or "fast")或表示动画时长的毫秒数值(如:1000)
easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供"linear" 和"swing".
fn:在动画完成时执行的函数,每个元素执行一次。
因为要让文字有飞出去的效果,所以要记录文字生成的时候的初始位置,然后再根据它修改top值,-100或者-200px都可以,这里所有的东西都是可以自己调整的,自己觉得好看即可。
源码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>空白点击出字</title>
<style>
span {
position: absolute;
user-select: none;
font-size: 20px;
}
</style>
<script src="jquery-3.5.1.js"></script>
<script>
$(function () {
var fontAll = [
'辛德拉',
'劫',
'卡萨丁',
'崔斯特',
'格雷福斯',
'安妮',
'阿木木',
'卡兹克',
'纳尔',
'德莱厄斯',
'德莱文',
'卡尔玛',
];
var colorAll = [
'red',
'pink',
'yellow',
'blue',
'aqua',
'green',
'gold',
'brown',
'grey',
'orange',
];
$(document).click(function (e) {
var $span = $('<span>' + fontAll[Math.floor(Math.random() * fontAll.length)] + '</span>');
$('body').append($span);
$span.css('color', colorAll[Math.floor(Math.random() * colorAll.length)])
var width = $span.width()
var height = $span.height()
var init = e.pageY - height / 2;
$span.css({
left: e.pageX - width / 2 + 'px',
top: init + 'px'
});
$span.animate({
fontsize: 10 + 'px',
top: init - 150 + 'px',
opacity: .2
}, 1000, function () {
$span.css('display', 'none');
})
});
});
</script>
</head>
<body>
</body>
</html>
总结
简单的一个特效,本例是文字,大家可以根据同样的思路弹出图片或者等等。