点击网页鼠标处飞出文字特效jQuery

it2023-09-04  66

这个特效笔者还真找不出什么特别贴切的标题来描述,直接看看效果图吧。哦对了,这个特效的灵感是笔者自己浏览一些网页的时候,鼠标点击,就会弹出或是文字或是图片,觉得新鲜就做了一个小的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>

总结

简单的一个特效,本例是文字,大家可以根据同样的思路弹出图片或者等等。觉得不错的点个赞吧~!

最新回复(0)