jQuery自定义插件开发基础1——jQuery实用函数的实现

9Tech·HTML5开发交流群:53156466

jQuery中已经存在很多常用的工具函数,使用这些函数能够在开发中帮助我们解决很多常见的问题,从而提高开发效率,比如常用的有:$.ajax使用ajax调用,$.each用于遍历对象和数组,$.grep用于过滤数组,$.map对于一个数组进行一定程度转换后返回转换后的数组,等等一系列的方法;但是有时候由于业务的需要,我们可能需要在项目中多次使用一些函数,在这种情况下,可以把这些函数封装成jQuery的实用函数,以方便调用和重用。以下介绍如何通过jQuery提供的插件机制来扩展我们自己的实用函数。

-、通过jQuery提供的扩展功能来实现一个jQuery的实用函数
jQuery的实用函数相等于java中的静态方法,直接定义在jQuery上,下面以实现一个简单的弹出一个“hello world!”的提示框来说明这一点。

  1. (function($){
  2.   $.helloworld = function(){
  3.       alert("Hello World!");
  4.   }
  5. })(jQuery);
复制代码
这就定义了一个名为helloworld的jQuery实用函数,通过$.helloworld()就可以调用。
1、这里使用了一个javaScript的匿名函数,并把jQuery对象当作参数传递给形参$,并执行这个函数。这样做的好处是,当程序里使用了除jQuery外,还有另外的js类库,并且也使用了$,那么$就会产生冲突,jQuery提供了jQuery.noConflict()来释放对$的控制权,交由其他类库使用。这里使用匿名函数的方式就能够避免这种冲突问题,并能在函数内部使用$来操作,这时的$只是一个局部变量,不会影响到其他类库的使用。

2、$.helloworld函数才是我们要实现的jQuery实用函数,放在匿名函数的函数体里去实现,如果没有使用其他类库,放在外面也是可以的,但是为了程序后期的扩展,也许会引用其他类库,最好的方式是放在匿名函数内部去实现,这也是官方所推荐的方式。
以下为在html中调用的部分代码:

  1. <script type="text/javascript">
  2.     // 页面加载完则弹出helloworld对话框
  3.     $(function(){
  4.          $.helloworld();
  5.     });
  6. </script>
复制代码
二、给jquery实用函数传递参数

先来写一个例子,求两数的最大值:

  1. (function($){
  2.    $.maxFromTwonum = function(num1, num2)  {
  3.        return num1 > num2 ? num1 : num2;
  4.    }
  5. })(jQuery);
复制代码
这个实用函数再调用时需要传递2个数值,使用$.maxFromTwonum(12, 28);则返回28。这个例子也很简单,在项目开发中往往会遇到一些复杂的功能,需要抽取出来封装成组件来提供给项目各处调用,这时往往需传递大量的参数,有些可能是必须的参数,有些可能是可选的,这种情况则不能使用以上方式直接在形参列表中列出参数。一种好的方式,也是推荐的方式是使用带有key-value对的散列对象,key为参数的名,value为参数的值。以下给出具体的使用方式。

  1. (function(){
  2.    // n1为必须传递的参数,因此可单独放在外面
  3.    // options则为可选参数,按照需求来传递相应的参数
  4.    $.complexParam = function(n1, options){
  5.         // 可为参数设定一些初始值
  6.         var settings = {
  7.               p1 : value1,
  8.               p2 : value2,
  9.               p3 : value3,
  10.               p4 : value4,
  11.               …………
  12.         };

  13.         //通过$.extend来合并传递的参数到settings上,并覆盖相应的初始值
  14.         settings = $.extend(settings, options);
  15.         
  16.        // 在这里实现相应的业务逻辑代码……
  17.    }
  18. })(jQuery);
复制代码

三、利用jQuery扩展实用函数的方式来实现一个小例子
在通常的网页应用中,免不了要有一些提示框,警告框之类的,但是浏览器自带的弹出框并不美观,很多网页用css和js脚本实现了属于自己的提示框。以下就给出一个简易的弹出提示框效果,可以在此基础上进一步优化,实现一个通用的组件。

1、js代码:jquery.dialog_self.js

  1. (function(){
  2.    /**
  3.     * 实现一个自定义的弹出对话框。
  4.         * 参数:title, 对话框标题
  5.         *       message,对话框需要显示的信息,
  6.         *       divId,指定一个div的id标识,以此div做为对话框的内容
  7.         *       dialogtype, 对话框的类型:提示、警告、询问等,
  8.         *       isOper, 是否背景可操作
  9.         */
  10.    $.dialogSelf = function(options){
  11.            // 为插件提供默认值
  12.        var setting = {
  13.                   title: "对话框",
  14.                message : "hello world!",
  15.                    dialogtype : "提示",
  16.                    isOper : true
  17.            };
  18.        // 调用时传入的参数将覆盖默认的值
  19.            setting = $.extend(setting, options);
  20.            
  21.            var $ele = $.dialogSelf.dialogPosition($.dialogSelf.creatDialog(setting));
  22.            $("body").append($ele);
  23.    };
  24.        
  25.    // 构建对话框
  26.    $.dialogSelf.creatDialog = function(setting){
  27.       return $("<div/>").addClass("ui-my-dialog")
  28.          .append($.dialogSelf.creatDialogTitle(setting))
  29.          .append($.dialogSelf.createDialogContent(setting))
  30.          .append($.dialogSelf.createDialogFooter(setting));
  31.    }
  32.    
  33.    // 构建对话框标题栏
  34.    $.dialogSelf.creatDialogTitle = function(setting) {
  35.            var close = $("<a>\xd7</a>").click(function(){
  36.                    $.dialogSelf.dialogClose();
  37.            });
  38.          return $("<div/>").addClass("ui-my-title")
  39.          .append("<span>"+setting.title+"</span>")
  40.          .append(close);
  41.    }
  42.    
  43.    // 构建对话框内容
  44.    $.dialogSelf.createDialogContent = function(setting) {
  45.             return $("<div/>").addClass("ui-my-content")
  46.                 .append("<span>"+setting.dialogtype+": </span>")
  47.                 .append("<span>"+setting.message+"</span>");
  48.    }
  49.    
  50.    // 构建对话框的footer
  51.    $.dialogSelf.createDialogFooter = function(setting) {
  52.            var comfire = $("<a>确定</a>").click(function(){
  53.                    $.dialogSelf.dialogClose();
  54.            });
  55.             return $("<div/>").addClass("ui-my-footer")
  56.                 .append(comfire);
  57.    }
  58.    
  59.    // 对话框的位置窗口居中
  60.    $.dialogSelf.dialogPosition = function($ele) {
  61.        var winWidth = $(window).width();
  62.            var winHeight = $(window).height();
  63.         
  64.            var width = $ele.outerWidth();
  65.            var height = $ele.outerHeight();
  66.          
  67.            var posH = (winHeight - height)/2 + $(document).scrollTop();
  68.            var posW = (winWidth - width)/2;
  69.            
  70.            $ele.css({
  71.                    position : "absolute",
  72.                    "z-index" : "100",
  73.                    top : posH + "px",
  74.                left: posW + "px"
  75.            });
  76.            return $ele;
  77.     }
  78.     
  79.     // 关闭对话框
  80.     $.dialogSelf.dialogClose = function() {
  81.             $(".ui-my-dialog").remove();
  82.     }
  83. })(jQuery);
复制代码

2、css代码:jquery.dialog_self.css

  1. .ui-my-dialog {
  2.         border:3px solid #ff32a1;
  3.         background: #ffe;
  4.         width:400px;
  5.         height:250px;
  6. }

  7. .ui-my-title {
  8.         height:10%;
  9.         background: #70adcd;
  10.         color: #FFFFEE;
  11.         font-weight:bold;
  12.         padding :8px;
  13. }

  14. .ui-my-title a {
  15.         border:none;
  16.         display:inline-block;
  17.         float:right;
  18.         cursor: pointer;
  19. }

  20. .ui-my-content {
  21.         height:63%;
  22.         padding:5px;
  23. }

  24. .ui-my-content span{
  25.         display:block;
  26. }

  27. .ui-my-footer {
  28.         height:10%;
  29.         background:#c8d5e2;
  30.         padding :8px;
  31. }

  32. .ui-my-footer a {
  33.         border:none;
  34.         display:block;
  35.         width:50px;
  36.         height:22px;
  37.         color:#fdfdfd;
  38.         float:right;
  39.         text-align:center;
  40.         background:#3e78fd;
  41.         cursor: pointer;
  42. }
复制代码
在html页面导入js和css 文件,就可以使用这个插件了。具体的测试代码可以参照附件!

原文http://tangyuntao-2008.iteye.com/blog/1850853
基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值