jQuery插件jRumble实现网页元素抖动


Posted in Javascript onJune 05, 2015

jRumble,它能让网页上的任意元素抖动起来,在你的网站中使用这个效果会有很大的机率吸引用户的注意力。此插件的效果可以用在链接上,或者div上,你可以设置抖动的范围、XY坐标、抖动幅度等。可设置为当鼠标移动上去抖动或者默认一直抖动,插件可定制性还是蛮高的。PS:此插件在IE中还存在一些小问题

jQuery jRumble是使用方法

<script type="text/javascript" src="js/jquery-jrumble.js"></script>
<script type="text/javascript">
$(document).ready(function(){     
 $('#demo1').jrumble({
 rangeX: 2,
 rangeY: 2,
 rangeRot: 1
 });
 
 $('#demo2').jrumble({
 rangeX: 10,
 rangeY: 10,
 rangeRot: 4
 });
 
 $('#demo3').jrumble({
 rangeX: 4,
 rangeY: 0,
 rangeRot: 0
 });
 
 $('#demo4').jrumble({
 rangeX: 0,
 rangeY: 0,
 rangeRot: 5
 });
 
 $('#demo5').jrumble({
 rumbleSpeed: 0
 });
 
 $('#demo6').jrumble({
 rumbleSpeed: 50
 });
 
 $('#demo7').jrumble({
 rumbleSpeed: 100
 });
 
 $('#demo8').jrumble({
 rumbleSpeed: 200
 });
 
 $('#demo9').jrumble({
 rumbleEvent: 'hover'
 });
 
 $('#demo10').jrumble({
 rumbleEvent: 'click'
 });
 
 $('#demo11').jrumble({
 rumbleEvent: 'mousedown'
 });
 
 $('#demo12').jrumble({
 rumbleEvent: 'constant'
 }); 
 
 $('#demo13').jrumble({
 posX: 'left',
 posY: 'top'
 });
 
 $('#demo14').jrumble({
 posX: 'right',
 posY: 'top'
 });
 
 $('#demo15').jrumble({
 posX: 'left',
 posY: 'bottom'
 });
 
 $('#demo16').jrumble({
 posX: 'right',
 posY: 'bottom'
 }); 
 
 $('.view-source pre').hide();
 $('.view-source a').toggle(function(){
 $(this).siblings('pre').stop(false, true).slideDown(500);
 $(this).html('Hide Source');
 }, function(){
 $(this).siblings('pre').stop(false, true).slideUp(500);
 $(this).html('View Source');
 });
});
</script>

jRumble的参数配置

Option Default Description
rangeX 2 Set the horizontal rumble range (pixels)
rangeY 2 Set the vertical rumble range (pixels)
rangeRot 1 Set the rotation range (degrees)
rumbleSpeed 10 Set the speed/frequency in milliseconds of the rumble (lower number = faster)
rumbleEvent ‘hover' Set the event that triggers the rumble (‘hover', ‘click',‘mousedown', ‘constant')
posX ‘left' If using jRumble on a fixed or absolute positioned element, choose ‘left' or ‘right' to match your CSS
posY ‘top' If using jRumble on a fixed or absolute positioned element, choose ‘top' or ‘bottom' to match your CSS

jquery-jrumble.js源码

/*
jRumble v1.1 - http://jackrugile.com/jrumble
by Jack Rugile - http://jackrugile.com
Copyright 2011, Jack Rugile
MIT license - http://www.opensource.org/licenses/mit-license.php
*/

(function($){
 $.fn.jrumble = function(options){
 
 // JRUMBLE OPTIONS
 //---------------------------------
 var defaults = {
  rangeX: 2,
  rangeY: 2,
  rangeRot: 1,
  rumbleSpeed: 10,
  rumbleEvent: 'hover',
  posX: 'left',
  posY: 'top'
 };

 var opt = $.extend(defaults, options);

 return this.each(function(){
  
  // VARIABLE DECLARATION
  //---------------------------------
  $obj = $(this);  
  var rumbleInterval; 
  var rangeX = opt.rangeX;
  var rangeY = opt.rangeY;
  var rangeRot = opt.rangeRot;
  rangeX = rangeX*2;
  rangeY = rangeY*2;
  rangeRot = rangeRot*2;
  var rumbleSpeed = opt.rumbleSpeed;  
  var objPosition = $obj.css('position');
  var objXrel = opt.posX;
  var objYrel = opt.posY;
  var objXmove;
  var objYmove;
  var inlineChange;
  
  // SET POSITION RELATION IF CHANGED
  //---------------------------------
  if(objXrel === 'left'){
  objXmove = parseInt($obj.css('left'),10);
  }
  if(objXrel === 'right'){
  objXmove = parseInt($obj.css('right'),10);
  }
  if(objYrel === 'top'){
  objYmove = parseInt($obj.css('top'),10);
  }
  if(objYrel === 'bottom'){
  objYmove = parseInt($obj.css('bottom'),10);
  }
  
  // RUMBLER FUNCTION
  //---------------------------------  
  function rumbler(elem) {  
  var randBool = Math.random();
  var randX = Math.floor(Math.random() * (rangeX+1)) -rangeX/2;
  var randY = Math.floor(Math.random() * (rangeY+1)) -rangeY/2;
  var randRot = Math.floor(Math.random() * (rangeRot+1)) -rangeRot/2; 
  
  // IF INLINE, MAKE INLINE-BLOCK FOR ROTATION
  //---------------------------------
  if(elem.css('display') === 'inline'){
   inlineChange = true;
   elem.css('display', 'inline-block')
  }
  
  // ENSURE MOVEMENT
  //---------------------------------  
  if(randX === 0 && rangeX !== 0){
   if(randBool < .5){
   randX = 1;
   }
   else {
   randX = -1;
   }
  }
  
  if(randY === 0 && rangeY !== 0){
   if(randBool < .5){
   randY = 1;
   }
   else {
   randY = -1;
   }
  }
  
  // RUMBLE BASED ON POSITION
  //---------------------------------
  if(objPosition === 'absolute'){
   elem.css({'position':'absolute','-webkit-transform': 'rotate('+randRot+'deg)', '-moz-transform': 'rotate('+randRot+'deg)', '-o-transform': 'rotate('+randRot+'deg)', 'transform': 'rotate('+randRot+'deg)'});
   elem.css(objXrel, objXmove+randX+'px');
   elem.css(objYrel, objYmove+randY+'px');
  }
  if(objPosition === 'fixed'){
   elem.css({'position':'fixed','-webkit-transform': 'rotate('+randRot+'deg)', '-moz-transform': 'rotate('+randRot+'deg)', '-o-transform': 'rotate('+randRot+'deg)', 'transform': 'rotate('+randRot+'deg)'});
   elem.css(objXrel, objXmove+randX+'px');
   elem.css(objYrel, objYmove+randY+'px');
  }
  if(objPosition === 'static' || objPosition === 'relative'){
   elem.css({'position':'relative','-webkit-transform': 'rotate('+randRot+'deg)', '-moz-transform': 'rotate('+randRot+'deg)', '-o-transform': 'rotate('+randRot+'deg)', 'transform': 'rotate('+randRot+'deg)'});
   elem.css(objXrel, randX+'px');
   elem.css(objYrel, randY+'px');
  }
  } // End rumbler function
  
  // EVENT TYPES (rumbleEvent)
  //--------------------------------- 
  var resetRumblerCSS = {'position':objPosition,'-webkit-transform': 'rotate(0deg)', '-moz-transform': 'rotate(0deg)', '-o-transform': 'rotate(0deg)', 'transform': 'rotate(0deg)'};
  
  if(opt.rumbleEvent === 'hover'){
  $obj.hover(
   function() {
   var rumblee = $(this);
   rumbleInterval = setInterval(function() { rumbler(rumblee); }, rumbleSpeed);
   },
   function() {
   var rumblee = $(this);
   clearInterval(rumbleInterval);
   rumblee.css(resetRumblerCSS);
   rumblee.css(objXrel, objXmove+'px');
   rumblee.css(objYrel, objYmove+'px');
   if(inlineChange === true){
    rumblee.css('display','inline');
   }
   }
  );
  }
  
  if(opt.rumbleEvent === 'click'){
  $obj.toggle(function(){
   var rumblee = $(this);
   rumbleInterval = setInterval(function() { rumbler(rumblee); }, rumbleSpeed);
  }, function(){
   var rumblee = $(this);
   clearInterval(rumbleInterval);
   rumblee.css(resetRumblerCSS);
   rumblee.css(objXrel, objXmove+'px');
   rumblee.css(objYrel, objYmove+'px');
   if(inlineChange === true){
   rumblee.css('display','inline');
   }
  });
  }
  
  if(opt.rumbleEvent === 'mousedown'){
  $obj.bind({
   mousedown: function(){
   var rumblee = $(this);
   rumbleInterval = setInterval(function() { rumbler(rumblee); }, rumbleSpeed);
   }, 
   mouseup: function(){
   var rumblee = $(this);
   clearInterval(rumbleInterval);
   rumblee.css(resetRumblerCSS);
   rumblee.css(objXrel, objXmove+'px');
   rumblee.css(objYrel, objYmove+'px');
   if(inlineChange === true){
    rumblee.css('display','inline');
   }
   },
   mouseout: function(){
   var rumblee = $(this);
   clearInterval(rumbleInterval);
   rumblee.css(resetRumblerCSS);
   rumblee.css(objXrel, objXmove+'px');
   rumblee.css(objYrel, objYmove+'px');
   if(inlineChange === true){
    rumblee.css('display','inline');
   }
   }
  });
  }
  
  if(opt.rumbleEvent === 'constant'){
  var rumblee = $(this);
  rumbleInterval = setInterval(function() { rumbler(rumblee); }, rumbleSpeed);
  }
  
 });
 }; 
})(jQuery);

在线演示 http://jackrugile.com/jrumble/#demos

源码下载 http://jackrugile.com/jrumble/jquery.jrumble.1.3.zip

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
一些不错的js函数ajax
Aug 20 Javascript
javascript与asp.net(c#)互相调用方法
Dec 13 Javascript
控制文字内容的显示与隐藏示例
Jun 11 Javascript
基于vue实现分页/翻页组件paginator示例
Mar 09 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
Aug 09 Javascript
javascript代码优化的8点总结
Jan 29 Javascript
详解element-ui中el-select的默认选择项问题
Aug 02 Javascript
如何基于filter实现网站整体变灰功能
Apr 17 Javascript
vue结合el-upload实现腾讯云视频上传功能
Jul 01 Javascript
vue插件--仿微信小程序showModel实现模态提示窗功能
Aug 19 Javascript
vue使用transition组件动画效果的实例代码
Jan 28 Vue.js
Vue2.x-使用防抖以及节流的示例
Mar 02 Vue.js
js+html5获取用户地理位置信息并在Google地图上显示的方法
Jun 05 #Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 #Javascript
JavaScript中toString()方法的使用详解
Jun 05 #Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 #Javascript
jQuery插件EnPlaceholder实现输入框提示文字
Jun 05 #Javascript
基于jQuery+JSON的省市二三级联动效果
Jun 05 #Javascript
简介JavaScript中Boolean.toSource()方法的使用
Jun 05 #Javascript
You might like
javascript 四则运算精度修正函数代码
2010/05/31 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
jQuery实现新消息在网页标题闪烁提示
2015/06/23 Javascript
javascript事件处理模型实例说明
2016/05/31 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
解决vue路由后界面没有变化,但是链接有的问题
2018/09/01 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
vue+element实现图片上传及裁剪功能
2020/06/29 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
python获取局域网占带宽最大3个ip的方法
2015/07/09 Python
python 实现得到当前时间偏移day天后的日期方法
2018/12/31 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
执行Python程序时模块报错问题
2020/03/26 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Python 解析简单的XML数据
2020/07/24 Python
python实现AdaBoost算法的示例
2020/10/03 Python
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
有原因的手表:Flex Watches
2019/03/23 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
网上开店必备创业计划书
2014/01/26 职场文书
法学函授自我鉴定
2014/02/06 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
普通党员对照检查材料
2014/09/24 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
2016年社区综治宣传月活动总结
2016/03/16 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers