使用jQuery进行组件开发(完整例子)

使用jQuery进行组件开发和使用纯JavaScript脚本(不使用框架)原理基本类似,特别是公共方法的组织是一样的。

不同点是,jQuery使用了插件机制,通过$()直接进行操作对象(DOM元素)绑定,然后对DOM元素或HTML代码进行绑定事件等的操作。

另一个不同点则是把jQuery当做工具来使用,用来创建DOM对象,快速查找指定DOM对象等。

例子测试通过。

初级简单示例,只实现了增加页和选择页功能。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> Design JS component with jQuery </title>
<script src="mx/scripts/lib/jquery.js" type="text/javascript"></script>
<link href="tabs.css" rel="stylesheet" type="text/css" />

 <style>

.tabsDiv{width: 500px;height: 350px;margin-top: 0px;margin-left: 0px;}
.tabsDiv ul{
	width: 500px;height: 20px;
	list-style: none;

	margin-bottom: 0px;margin: 0px;
	padding: 0px;
	border-left:solid 1px #ffffff;border-right:solid 1px #ffffff;border-top:solid 1px #ffffff;border-bottom:solid 1px #e0e0e0;
}

.tabsDiv div{
	width: 500px;height: 330px;
	background-color: #ffffff;
	border:solid 1px #e0e0e0;
}

.tabsSeletedLi{
	width: 100px;height: 20px;
	background-color: white;
	float: left;
	text-align: center;
	border-left:solid 1px #e0e0e0;border-right:solid 1px #e0e0e0;border-top:solid 1px #e0e0e0;border-bottom:solid 1px #ffffff;
}

.tabsSeletedLi a{
	width: 100px;
	height: 20px;
	color:#000000;
	text-decoration:none;
}

.tabsUnSeletedLi{
	width: 100px;height: 20px;
	background-color: #e0e0e0;
	float: left;
	text-align: center;
	border:solid 1px #e0e0e0;
}

.tabsUnSeletedLi a{
	width: 100px;height: 20px;
	color: #ffffff;
	text-decoration:none;
}

 </style>
</head>

<body>
<!--
	<div style="width:400px;height:100px;border:solid 1px #e0e0e0;">

	</div>
-->

    <!--tabs示例-->
    <div id="mytabs">
        <!--选项卡区域-->
        <ul>
            <li><a href="#tabs1">选项1</a></li>
            <li><a href="#tabs2">选项2</a></li>
            <li><a href="#tabs3">选项3</a></li>
        </ul>
        <!--面板区域-->
        <div id="tabs1">11111</div>
        <div id="tabs2">22222</div>
        <div id="tabs3">33333</div>
    </div>

<script lang="javascript">
(function ($) {
    $.fn.tabs = function (options) {
    	var me = this;

		//使用鼠标移动触发,亦可通过click方式触发页面切换
        var defualts = { switchingMode: "mousemove" };

		//融合配置项
        var opts = $.extend({}, defualts, options);

		//DOM容器对象,类似MX框架中的$e
        var $e = $(this);

        //选中的TAB页索引
        var selectedIndex = 0;

        //TAB列表
        var $lis;

		//PAGE容器
		var aPages = [];

		//初始化方法
		me.init = function(){

			//给容器设置样式类
	        $e.addClass("tabsDiv");	 

	        $lis = $("ul li", $e);

	        //设置TAB头的选中和非选中样式
	        $lis.each(function(i, dom){
	        	if(i==0){
	        		$(this).addClass("tabsSeletedLi")
	        	}else{
	        		$(this).addClass("tabsUnSeletedLi");
	        	}

	        });

	       	//$("ul li:first", $e).addClass("tabsSeletedLi");
	        //$("ul li", $e).not(":first").addClass("tabsUnSeletedLi");
			//$("div", $e).not(":first").hide();

			//TAB pages绑定
			var $pages = $('div', $e);
			$pages.each(function(i, dom){
				if(i == 0){
					$(this).show();
				}else{
					$(this).hide();
				}

				aPages.push($(this));
			});

			//绑定事件
	        $lis.bind(opts.switchingMode, function() {
	        	var idx = $lis.index($(this))
	            me.selectPage(idx);
	        });		

		}

		/**
		 *  选中TAB页
		 *
		 */
		me.selectPage = function(idx){
			if (selectedIndex != idx) {
                $lis.eq(selectedIndex).removeClass("tabsSeletedLi").addClass("tabsUnSeletedLi");
                $lis.eq(idx).removeClass("tabsUnSeletedLi").addClass("tabsSeletedLi");

                aPages[selectedIndex].hide();
	            aPages[idx].show();
                selectedIndex = idx;
            };
		}

        me.showMsg = function(){
        	alert('WAHAHA!');
        }

		//自动执行初始化函数
		me.init();

		//返回函数对象
		return this;
    };
})(jQuery);

</script>   

<script type="text/javascript">
/*
    $(function () {
        $("#mytabs").tabs;
    });
*/

	var tab1 =  $("#mytabs").tabs();
	tab1.showMsg();
</script>
</body>
</html>

最终效果如图所示:

时间: 2024-10-11 22:49:52

使用jQuery进行组件开发(完整例子)的相关文章

jquery自定义组件开发

jquery的组件已经有很多,但是有可能找不到符合我们需求的组件,所以我们可以动手自己封装一个jquery组件. 第一步要知道封装jquery组件的基本语法 (function ($) { $.fn.ziDinYiZuJian = function () { //ziDinYiZuJian 组件 要实现的功能代码 } })(jQuery) 第二步调用自定义的组件 调用组件必须要引入在组件中用到的js包,然后调用 <div id="dom"></div> $('#

EXTJS 组件开发(完整例子)

目标:EXTJS组件开发,从component基础实现一个TAB控件. 使用EXTJS版本为5.0.测试通过. 这个例子还很初级,仅仅是说明通过示例使用EXTJS进行组件开发的一个基本思路. <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>EXT JS TEST</title>

对jquery插件Jcrop开发一个裁剪组件

Jcrop是一款优秀的裁剪工具,它不仅可以裁剪图像,还可以裁剪canvas及任何的div元素,具体可参考: http://code.ciaoca.com/jquery/jcrop/ 基于Jcrop,开发一个js组件(Cut.js),使之可进行复用: (function(jQuery,window,undefined){    window.Cut = window.Cut || {};    var _default={        boxWidth:0,        boxHeight:0

jQuery EasyUI Datagrid组件的完整的基础DOM结构

该日志由 世纪之光 于2年前发表在datagrid分类下 转载: jQuery EasyUI Datagrid组件的完整的基础DOM结构 | WebUI框架使用参考+ http://www.easyui.info/archives/1157.html 关键字: datagrid源码分析, datagrid结构, easyui源码分析 标题可能有点长,什么叫“完整的基础DOM结构”,这里“基础”的意思是指这个结构不依赖具体数据,不依赖Datagrid的view属性,只要存在Datagrid实例就会

饿了么基于Vue2.0的通用组件开发之路(分享会记录)

Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网:http://element.eleme.io/#/github:https://github.com/ElemeFE/element ## 设计目的 大部分项目起源都是源于业务方的需求,Element 也是一样.随着公司业务发展,内部开始衍生出很多后台系统,UED 部门也接到越来越多的设计需求,

javascript组件开发之基类继承实现

上一篇文章大概的介绍了一下关于javascript组件的开发方式,这篇文章主要详细记一下基类的编写,这个基类主要是实现继承的功能 为什么要封装基类? 由于这次重构项目需要对各种组件进行封装,并且这些组件的实现方式都差不多,为了便于管理,让代码尽量统一,所以到对组件封装一个base基类(javascript没有类的概念,暂且这样叫吧),关于javascript的oo实现:可以参考这篇文章javascript oo实现:写得很赞,膜拜,我改写的这个基于John Resig的实现方式. 基类的封装方式

Flex自定义组件开发之日周月日期选择日历控件

原文:Flex自定义组件开发之日周月日期选择日历控件 使用过DateField的我们都知道,DateField 控件是用于显示日期的文本字段,字段右侧带有日历图标.当用户在控件边框内的任一位置单击时,将弹出一个 DateChooser 控件,显示当月的所有日期.如果未选择日期,则该文本字段为空白,并且 DateChooser 控件中将显示当前日期的月份.当 DateChooser 控件处于打开状态时,用户可以在各个月份和年份之间滚动,并选择某个日期.选择日期后,DateChooser 控件关闭,

javascript组件开发

基本功能 最简陋的写法: 全局函数全局变量写法 <meta charset="utf-8"> <title>test</title> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script> $(function() { var input = $('#J_input'); //用来获取字数 funct

Flex自定义组件开发 - jackyWHJ

一般情况下需要组件重写都是由于以下2个原因: 1.在FLEX已有组件无法满足业务需求,或是需要更改其可视化外观等特性时,直接进行继承扩展. 2.为了模块化设计或进一步重用,需要对FLEX组件进行组合. 而Flex组件开发有2种方式: AS方式和MXML方式.对于上述第一个原因我一般采用AS方式,通过继承 UIComponent来开发,而针对原因2我一般使用的是 MXML方式.本文主要讲的是AS开发方式. 重写一个组件依次调用的方法 : 1)Constructor构造方法,初始化属性,默认值 在这