`
gogole_09
  • 浏览: 205520 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jQuery插件--滑动条

阅读更多

 jQuery库是一个很强大的js库,其中它容许自己对其扩展,做一些自己的插件来实现一些特定的功能,但是其插件开发一些规范性有以下几点需要注意的:

  PS:以下内容参考于jQuery插件开发

  1. 使用闭包:

  

(function($) {
  // Code goes here
})(jQuery);
 

a) 避免全局依赖。

b) 避免第三方破坏。

c) 兼容jQuery操作符'$'和'jQuery '

   其相当于如下:

 

var jq = function($) {
  // Code goes here
};
jq(jQuery);
 

2. 扩展

jQuery提供了2个供用户扩展的‘基类’ - $.extend和$.fn.extend.

$.extend 用于扩展自身方法,如$.ajax, $.getJSON等,$.fn.extend则是用于扩展jQuery类,包括方法和对jQuery对象的操作。为了保持jQuery的完整性,我比较 趋向于使用$.fn.extend进行插件开发而尽量少使用$.extend.

 

 

3. 选择器

jQuery提供了功能强大,并兼容多种css版本的选择器,不过发现很多同学在使用选择器时并未注重效率的问题。

a) 尽量使用Id选择器,jQuery的选择器使用的API都是基于getElementById或getElementsByTagName,因此可以知道 效率最高的是Id选择器,因为jQuery会直接调用getElementById去获取dom,而通过样式选择器获取jQuery对象时往往会使用 getElementsByTagName去获取然后筛选。

b) 样式选择器应该尽量明确指定tagName, 如果开发人员使用样式选择器来获取dom,且这些dom属于同一类型,例如获取所有className为jquery的div,那么我们应该使用的写法 是$('div.jquery')而不是$('.jquery'),这样写的好处非常明显,在获取dom时jQuery会获取div然后进行筛选,而不是 获取所有dom再筛选。

c) 避免迭代,很多同学在使用jQuery获取指定上下文中的dom时喜欢使用迭代方式,如$('.jquery .child'),获取className为jquery的dom下的所有className为child的节点,其实这样编写代码付出的代价是非常大 的,jQuery会不断的进行深层遍历来获取需要的元素,即使确实需要,我们也应该使用诸如$(selector,context), $('selector1>selector2'), $(selector1).children(selector2), $(selctor1).find(selector2)之类的方式。

 

  下面来看下jQuery的滑块插件:

 如图:

  

 

插件写好之后,最终页面代码如下:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Untitled Document</title>
        <script type="text/javascript" src="jquery-1.2.6.js"></script>
        <script type="text/javascript" src="jquery.jslider.js"></script>
		
        <style type="text/css">
			 .defaultbar {
                margin-top: 10px;
                height: 5px;
                background-color: #FFFFE0;
                border: 1px solid #A9C9E2;
                position: relative;
            } .defaultbar .jquery-completed {
                height: 3px;
                background-color: #7d9edb;
                top: 1px;
                left: 1px;
                position: absolute;
            } .defaultbar .jquery-jslider {
                height: 15px;
                background-color: #E6E6FA;
                border: 1px solid #A5B6C8;
                top: -6px;
                display: block;
                cursor: pointer;
                position: absolute;
            } .defaultbar .jquery-jslider-hover {
                background-color: #000080;
            }
            
            fieldset {
                border: solid 1px #dedede;
                padding: 0 10px;
            }
            
            fieldset legend {
                background-color: #FFF5FA;
                border: 1px solid #F8B3D0;
                padding: 5px 10px;
            }
        </style>
        <script type="text/javascript">
            $().ready(function(){
                var maxFont = 30;
                var mf = $('#myFont').css('font-size', 30);
                $.fn.jSlider({
                    renderTo: '#slidercontainer1',
                    size: {
                        barWidth: 400,
                        sliderWidth: 5
                    },
                    onChanging: function(percentage, e){
                        mf.css('font-size', maxFont * percentage);
						//在控制台输出信息
                        window.console && console.log('percentage: %s', percentage);
                    }
                });
            });
        </script>
    </head>
    <body>
        <fieldset>
            <dl>
                <div id="myFont">
                    Hello, world!
                </div>
                <div id="slidercontainer1">
                </div>
            </dl>
        </fieldset>
    </body>
</html>

 

  插件代码:

 

(function($){
    $.extend($.fn, {
        /*实现一个jquery滑动条插件*/
        jSlider: function(setting){
		    var ps = $.extend({
                renderTo: $(document.body),
                enable: true,
                initPosition: 'max',
                size: {barWidth: 200,sliderWidth: 5},
                barCssName: 'defaultbar',
                completedCssName: 'jquery-completed',
                sliderCssName: 'jquery-jslider',
                sliderHover: 'jquery-jslider-hover',
                onChanging: function(){
                },
                onChanged: function(){
                }
            }, setting);
            
			
            //强制将renderTo强制转换成jQuery对象
            ps.renderTo = (typeof ps.renderTo == 'string' ? $(ps.renderTo) : ps.renderTo);
            
            //渲染UI
            var sliderbar = $('<div><div>&nbsp;</div><div>&nbsp;</div></div>')
							.attr('class', ps.barCssName)
								.css('width', ps.size.barWidth)
									.appendTo(ps.renderTo);
            
            var completedbar = sliderbar.find('div:eq(0)')
									.attr('class', ps.completedCssName);
            
            var slider = sliderbar.find('div:eq(1)')
						.attr('class', ps.sliderCssName)
							.css('width', ps.size.sliderWidth);
            
			
            var bw = sliderbar.width(), sw = slider.width();
            
            ps.limited = {min: 0, max: bw - sw};
            
			//定位completedbar的填充长度以及slider左侧距离
            if (typeof window.$sliderProcess == 'undefined') {
                window.$sliderProcess = new Function('obj1', 'obj2', 'left', 
												'obj1.css(\'left\',left);obj2.css(\'width\',left);');
            }
            

			//eval('ps.limited.' + ps.initPosition)来获取,从而避免switch操作
			//此处相当于调用 sliderProcess(xx,xx,xxx)   执行slider.css('left',value);completedbar.css('left',value)
            $sliderProcess(slider, completedbar, eval('ps.limited.' + ps.initPosition));
            
            /*jQuery拖拽功能*/
            var slide = {
                drag: function(e){
                    var d = e.data;
					
                    var l=Math.min(Math.max(e.pageX - d.pageX + d.left, ps.limited.min), ps.limited.max);
					
					$sliderProcess(slider,completedbar,l);
					
					ps.onChanging(l/ps.limited.max,e);
                },
				
				drop:function(e){
					slider.removeClass(ps.sliderHover);
					
					ps.onChanged(parseInt(slider.css('left'))/ps.limited.max,e);
					//去除绑定
					$().unbind('mousemove',slide.drag).unbind('mouseup',slide.drop);
				}
            };
			
//			jSlider enable属性为true时,在end-user按下鼠标时绑定mousemove事件,在鼠标弹起时移除,我们只需要同步更新slider的left 属性和completedbar的width即可,同时在drag中绑定onChanging方法,在drop中绑定onChanged方法,向这两个方法推送的参数相同,1>百分比,即value值,介于0~1,2>event。
			if(ps.enable){
				slider.bind('mousedown',function(e){
					var d={
						left:parseInt(slider.css('left')),
						pageX:e.pageX
					}
					$(this).addClass(ps.sliderHover);
					$().bind('mousemove',d,slide.drag).bind('mouseup',d,slide.drop);
				});
			}
			
			slider.data = { bar: sliderbar, completed: completedbar };
            return slider;
        }
    });
})(jQuery);
 

 

  • 大小: 1.1 KB
  • 大小: 2.2 KB
分享到:
评论
5 楼 zhypengjw2012 2013-06-03  
非常感谢!我今天就用到了!
4 楼 lqwcwsse 2013-05-31  
[u][/u]为什么不适用手机的
3 楼 lqwcwsse 2013-05-31  
为什么不适用手机的
2 楼 lqwcwsse 2013-05-31  
为什么不适用手机的
1 楼 孤独寂寞冷 2012-10-18  
非常好,但是没看太懂……

相关推荐

    jquery插件-华丽的效果 图片、文本展示切换用的的效果:拉洋片

    本篇文章将围绕标题“jquery插件-华丽的效果 图片、文本展示切换用的的效果:拉洋片”来深入探讨这一主题。 首先,jQuery是一款非常流行的JavaScript库,它简化了JavaScript的DOM操作、事件处理、动画设计以及Ajax...

    jQuery滚动条插件-jQuery custom content scroller

    jQuery custom content scroller是一款强大的jQuery插件,专为网页内容滚动设计,提供了丰富的自定义功能,使得滚动条不仅实用,而且美观。这款插件适用于那些希望在网站上创建独特滚动体验的开发者,无论是横向滚动...

    jquery插件库-jquery左侧导航滑动网页定位效果.zip

    这个压缩包“jquery插件库-jquery左侧导航滑动网页定位效果.zip”显然是关于一个jQuery插件,其核心功能是创建一个左侧导航,该导航在用户滚动页面时能够自动定位到相应的内容区域。 首先,让我们深入了解一下...

    jquery-ui-1.8.18.custom,jquery-ui-1.8.18.custom.min,jquery-1.7.1.min

    5. **滑块 (Slider)**:创建水平或垂直的滑动条,用于数值选择或进度指示。 6. **按钮 (Buttons)**:将普通的HTML元素转换为具有样式和交互的按钮。 7. **效果 (Effects)**:包括基本动画、过渡效果以及自定义效果...

    jQuery滑动条插件

    4. `www.jq22.com.txt` 和 `jquery插件库.url`:这两个文件可能包含了关于jQuery资源网站的信息,jq22.com是一个知名的jQuery插件分享平台。 **二、滑动条插件的使用** 使用jQuery滑动条插件通常涉及以下几个步骤...

    DirectoryTree插件-jquery树形滑动导航

    DirectoryTree插件是基于jQuery的一款强大且灵活的树形滑动导航工具,它在网页设计中广泛用于构建层次结构清晰的目录或者导航菜单。这款插件可以帮助开发者轻松地创建交互式的、可折叠的树状视图,使得用户可以便捷...

    jQuery-UI-插件-使用说明+官方插件js包+jQuery及UI官方英文原版API手册_IT168文库

    - **滑动条 (Sliders)** - 实现数值的滑动选择。 - **用法**: ```javascript $( ".selector" ).slider(); ``` - **表格排序 (Tablesorters)** - 对表格数据进行排序。 - **用法**: ```javascript $( "....

    滚动条插件---jquery.nicescroll.js

    **jQuery.nicescroll.js** 是一个著名的 jQuery 插件,专为网页滚动条设计,旨在提供美观且功能丰富的用户体验。这个插件的核心优势在于它的易用性和广泛的浏览器兼容性,无需额外的 CSS 文件,即可在几乎所有的现代...

    jquery-ui-1.8.18.zip

    10. **可扩展性**:jQuery UI 的组件设计灵活,可以方便地与其他jQuery插件或自定义JavaScript代码结合使用。 在 `jquery-ui-1.8.18` 压缩包中,通常包含了以下内容: - **js 文件**:jQuery UI 的核心JavaScript...

    jquery-ui-1.9.1.custom

    jQuery UI 是一个基于 jQuery JavaScript 库的用户界面插件集合,它提供了丰富的交互效果、可自定义的主题以及各种可复用的组件,使得Web开发者能够轻松创建出具有高度互动性和用户体验良好的网页应用。在我们讨论的...

    实现滚屏操作的jquery 插件

    `fullpage.js` 是一个功能强大的 jQuery 插件,它允许开发者创建全屏滚动的网页布局,使用户能够通过简单的鼠标滚轮或触摸滑动来浏览页面的各个部分。这个插件特别适合于制作产品展示、幻灯片、教程或者任何需要流畅...

    jQuery分页插件可拖动滑动条跳转到任意页面.zip

    本资源"jQuery分页插件可拖动滑动条跳转到任意页面.zip"就是这样一个工具,它允许用户通过拖动滑动条快速跳转到页面列表中的任何位置,从而提供更加直观和便捷的导航。 首先,我们要理解jQuery的核心概念。jQuery是...

    jquery-up-down-slider.zip

    《jQuery上下滑动条插件详解》 在Web开发中,用户交互是至关重要的,而滑动条作为常见的交互元素,能提供直观、简洁的操作方式。"jquery-up-down-slider.zip"是一个基于jQuery库的滑动条插件,它允许用户通过上滑、...

    jquery-ui-1.11.2.zip下载

    5. 滑块(Slider):提供了一种通过滑动条来选择数值的方式,适用于音量控制、评分系统等场景。 四、主题和CSS jQuery UI提供了多种预设的主题,通过主题 roller 工具可以方便地定制外观。开发者可以根据自己的...

    jquery-1.8.3.min.rar

    8. **插件生态**:jQuery拥有庞大的插件生态系统,如Bootstrap、jQuery UI等,它们扩展了jQuery的功能,覆盖了表单验证、日期选择、图表展示等众多领域。 9. **兼容性**:jQuery致力于跨浏览器兼容性,使得开发者...

    jQuery01-入门

    - 例如:表格排序插件、滑动条插件等。 - **自定义插件**:开发者也可以根据需求编写自己的插件来扩展jQuery的功能。 #### 九、最佳实践 - **性能优化**:减少DOM操作次数,使用变量存储重复使用的元素。 - **...

    JQueryUI组件 JS下载

    - **Slider(滑块)**: 用于选择数值或进行等级评价的滑动条。 - **DatePicker(日期选择器)**: 方便用户选择日期,常用于表单输入。 - **Timepicker(时间选择器)**: 扩展了日期选择器,添加了时间选择功能。 ...

    jquery-ui-1.8.16.custom

    4. **滑块(Slider)**:可用来创建水平或垂直的滑动条,适用于调整值或选择范围。 5. **菜单(Menu)**:快速构建多级下拉菜单,适合网站导航或工具栏。 6. **Autocomplete**:自动补全功能,常用于输入框中提供...

Global site tag (gtag.js) - Google Analytics