jQuery插件开发小记
2015-10-31 17:04
513 查看
在编写前端网页时候,总是为了满足一些功能上的需求去写很多function。大部分都是面向过程的写法,比如弹个小窗口,改变个dom元素样式。这些都比较简单很好实现。但是对于一些比较复杂的需求,就没那么轻松了。
比如:要写一个网页,要求实现一屏幕一屏幕滚动的效果。我们可能会这样写。
这样基本可以实现滚屏的简单需求了。只要在主页面中调用一下pageScroll();方法就可以。
这看起来很简单,一切也都很顺利。然而,新的需求来了,要求点击超链接跳转到固定的某一屏。这乍一看是很简单就能实现的。依然是获取屏幕高度然后在根据页码算出距离就好了。
但是这个goTo(n);函数跟之前的pageScroll函数是两个函数,他们的变量是不能共享的,这样的话两个函数里就都有wH(屏幕高度的变量)、变量var main = $(‘.main’)(即滚屏的主框架dom元素)。而且这两个函数在语义上来说都是main这个元素上的操作。分开为两个单独的函数是不合理的。以后还有对main的操作的时候就又多了一个函数。而且这些函数里会有很多语义重复的变量,这是很头疼的事。
所以,我们需要一种面向对象的思维,将需要的重要变量定义在对象的属性上去,再将函数变成对象的方法。需要对象操作的时候通过对象来获取方法,进行操作。
这样我们要在html中初始化pageScroll效果时候就可以这样写了。
这其实就是添加了jquery的原型方法,我们可以通过dom元素直接调用我们定义的方法。以后在调用
时,他们所操作的也都是同一个dom元素。这样不仅语意清楚,最重要的是插件在复用的时候其他人不必了解你的函数如何写的,你只需要通过$.fn提供对外接口函数,别人直接调用就好了。
也可以通过这种配置方式,在初始化pageScroll时改变一些插件运行的参数,实现插件的可配置。
总结:主要是面向对象的原型写法,然后通过$.fn和option配置来提供插件的方法调用和参数配置。
比如:要写一个网页,要求实现一屏幕一屏幕滚动的效果。我们可能会这样写。
function pageScroll(){ //获取滚动模块dom元素 var main = $('.main'); //获取屏幕高度宽度 var wH ...; var wW ...; //屏幕触碰、绑定事件 $('.main').bind('touchstart',functino(){ //根据手指触碰开始和结束时的坐标变化判断上滚、下滚 var direction = getDirection(); //调用滚屏方法 if(dircetion == 'up'){ pageUp(); }else{ pageDown(); } }) }
这样基本可以实现滚屏的简单需求了。只要在主页面中调用一下pageScroll();方法就可以。
<script> $().ready(function(){ pageScroll(); }); </script>
这看起来很简单,一切也都很顺利。然而,新的需求来了,要求点击超链接跳转到固定的某一屏。这乍一看是很简单就能实现的。依然是获取屏幕高度然后在根据页码算出距离就好了。
function goTo(n){ //获取屏幕高度 var wH = $(window).height(); //移动距离 var movement = wH*(n-1); //移动main var $main = $('.main'); $main.move(n); ... }
但是这个goTo(n);函数跟之前的pageScroll函数是两个函数,他们的变量是不能共享的,这样的话两个函数里就都有wH(屏幕高度的变量)、变量var main = $(‘.main’)(即滚屏的主框架dom元素)。而且这两个函数在语义上来说都是main这个元素上的操作。分开为两个单独的函数是不合理的。以后还有对main的操作的时候就又多了一个函数。而且这些函数里会有很多语义重复的变量,这是很头疼的事。
所以,我们需要一种面向对象的思维,将需要的重要变量定义在对象的属性上去,再将函数变成对象的方法。需要对象操作的时候通过对象来获取方法,进行操作。
//定义pageScroll的构造函数 var pageScroll = function(element,options){ this.$ele = element; this.$defaults = { //页面切换速度 speed:'300', //手指触碰屏幕初始坐标 startY:'0', //当前窗口高度 wH:'0', //页面总数 pageCount:'0', //当前页码 currentPageIndex:'1', ... }; this.options = $.extend({},this.defaults,options); } //定义pageScroll方法 pageScroll.prototype = { //初始化main和page initialise: function(){ ... } //翻页函数 moveUp: fucntion(){ } moveDown: function(){ } //跳转到某一页 moveTo: function(){ } ... } $.fn.pageScroll = function(options){ //创建pageScroll实体对象 var pageScroll = new PageScroll(this,options); //调用上翻 pageScroll.moveUp(); //下翻 pageScroll.moveDown(); $.fn.moveTo = function(n){ pageScroll.moveTo(); } }
这样我们要在html中初始化pageScroll效果时候就可以这样写了。
$().ready(function(){ $('.main').pageScroll(); });
这其实就是添加了jquery的原型方法,我们可以通过dom元素直接调用我们定义的方法。以后在调用
$('.main').moveTo(n);
时,他们所操作的也都是同一个dom元素。这样不仅语意清楚,最重要的是插件在复用的时候其他人不必了解你的函数如何写的,你只需要通过$.fn提供对外接口函数,别人直接调用就好了。
$('.main').pageScroll({ //添加page,把page样式名称传去 page:'.page', //修改滚屏动画的速度 speed:'1000', });
也可以通过这种配置方式,在初始化pageScroll时改变一些插件运行的参数,实现插件的可配置。
总结:主要是面向对象的原型写法,然后通过$.fn和option配置来提供插件的方法调用和参数配置。
相关文章推荐
- jquery easyui tabs 在子Tab页中动态添加创建新tab页
- jquery选择器 之 获取父级元素、同级元素、子元素
- jquery实现仿百度自动补全功能
- jQuery实现密码强度检测
- 如何提高jQuery的性能探讨
- jQuery实现DOM加载方法源码分析
- 再eclipse的javaweb项目中添加JQuery文件时jquery-2.1.4.min.js报错
- jQuery获取Select选中的Text和Value
- jquery的一些用法总结
- JQuery原理介绍及学习方法
- JQuery解析XML数据的几个例子
- 使用jQuery实现元素拖动的要点
- jquery插件jquery.lazyload实现的图片延迟加载
- jQuery读取xml文件
- jQuery学习之prop和attr的区别示例介绍
- 关于jquery和子页面向父页面传值
- 在为知笔记中使用JQuery
- jQuery 人脸识别插件,支持图片和视频
- MyEclipse10中导入的jquery文件报错(出现红叉叉,提示语法错误)
- jQuery Checkbox Selected