如何打包jquery插件
前言
如今,jquery几乎是web开发的必备工具。甚至vs神器在2010年就开始在web项目中内置Jquery和ui。至于使用jquery的好处,这里就不赘述了。用过的我都认识。今天我们来讨论一下jquery的插件机制,jquery有上千个第三方插件。有时候我们写了一个独立的函数,想和jquery结合,可以用jquery链调用。有必要扩展jquery,把它写成插件。例如,下面是一个简单扩展jquery对象的演示:
//sample:扩展jquery对象的方法。bold()用于加粗字体。
(函数($) {
$ . fn . extend({ & quot;bold & quot:function(){////& lt;总结& gt
///粗体
///& lt;/summary & gt;
返回this . CSS({ font weight:& quot;bold & quot});
}
});
})(jQuery);
呼叫方法:
这是一个非常简单的扩展。接下来,我们来一步步分析上面的代码。
首先,jquery的插件机制
为了方便用户创建插件,jquery提供了jQuery.extend()和jQuery.fn.extend()方法。
1.jQuery.extend()方法有一个重载。
JQuery.extend(object),用于扩展JQuery类本身的参数,也就是说在jQuery类/naming 空之间添加新的函数,或者调用静态方法。比如jQuery内置的ajax方法都是用jQuery.ajax()调用的,有点像“类名”的静态方法。方法名”。让我们也写一个jQuery.extend(object)的例子:
//扩展jQuery对象本身jQuery . Extend({ ” minValue & quot;:函数(a,b){///& lt;总结& gt
///比较两个值并返回最小值
///& lt;/summary & gt;
返回一个& ltb?甲:乙;
},& quotmaxValue & quot:函数(a,b){///& lt;总结& gt
///比较两个值并返回最大值
///& lt;/summary & gt;
return a & gtb?甲:乙;
}
});//调用
var i = 100j = 101var min_v = $。minValue(i,j);// min_v等于100
var max_v = $。maxValue(i,j);// max_v等于101
重载:jquery.extend ([deep],target,object1,[objectn])
用一个或多个其他对象扩展一个对象,并返回扩展的对象。
如果没有指定target,jQuery将被命名为空来扩展自身。这有助于插件作者向jQuery添加新方法。
如果第一个参数设置为true,jQuery返回深度副本,递归地复制它找到的任何对象。否则,副本将与原始对象共享结构。
未定义的属性不会被复制,但从对象原型继承的属性会被复制。
参数
深度:可选。如果设置为true,递归合并。
目标:要修改的对象。
1:要合并到第一个对象中的对象。
ObjectN:可选。要合并到第一个对象的对象。
示例1:
合并设置和选项,修改并返回设置。
var设置= { validate: false,limit: 5,name:& quot;foo & quot};
var options = { validate: true,name:& quot;酒吧& quot};
jQuery.extend(设置,选项);
结果:
设置== {验证:真,限制:5,名称:& quot酒吧& quot}
示例2:
在不修改默认值的情况下合并默认值和选项。
var empty = { };
var defaults = { validate: false,limit: 5,name:& quot;foo & quot};
var options = { validate: true,name:& quot;酒吧& quot};
var settings = jQuery.extend(空,默认,选项);
结果:
设置== {验证:真,限制:5,名称:& quot酒吧& quot}
empty == { validate: true,limit: 5,name:& quot;酒吧& quot}
这种重载方法一般用于在编写插件时,用自定义插件参数覆盖插件的默认参数。
JQuery.fn.extend(object)扩展JQuery元素集以提供新方法(通常用于制作插件)。
我们先来看看fn是什么。看看jQuery代码,不难发现。
jQuery.fn = jQuery.prototype = {
init:函数(选择器,上下文){…..};
};
原来jQuery.fn = jQuery.prototype,是jQuery对象的原型。那么jQuery.fn.extend()方法就是扩展jQuery对象的原型方法。我们知道在原型上扩展方法相当于给对象增加了一个“成员方法”,而类的“成员方法”只能被类的对象调用,所以使用jQuery.fn.extend(object)扩展的方法,jQuery类的实例就可以使用这个“成员函数”。必须区分jQuery.fn.extend(object)和jQuery.extend(object)方法。
二。自动执行匿名函数/闭包
1.什么是自执行匿名函数?
指的是这样一个函数:(function {//code })();
2.问为什么(function {//code })();可以执行,函数{//code }();你会报错吗?
3.分析
(1).首先明确两者的区别:(function {// code})是表达式,function {// code}是函数声明。
(2).其次,js & quot编译”特性:js在“编译”阶段,函数声明会被解释,但表达式会被忽略。
(3).当js执行到function(){//code }();,因为function() {//code}处于“编译”阶段已经解释过了,js会跳过function(){//code},尝试执行();,所以它会报告一个错误;
js执行到(function {// code})()时;当,因为(function {// code})是表达式,所以js会求解得到返回值。因为返回值是函数,所以遇到();当,它将被执行。
另外,函数转换成表达式的方法不一定要依赖分组运算符(),我们也可以使用void运算符、~ operator,!操作员…
例如:
bootstrap框架中插件的编写方法:
!函数($){
//做点什么;
}(jQuery);
和
(函数($){
//做点什么;
})(jQuery);是一回事。
匿名函数最大的用途是创建闭包(这是JavaScript语言的特点之一),还可以构建命名空空间,减少全局变量的使用。
例如:
var a = 1;
(函数()(){
var a = 100
})();
警戒(一);//弹出1
更多闭包和匿名函数请查看文章匿名函数和Javascript的自执行。
第三,逐步打包JQuery插件
接下来,我们来写一个高亮的jqury插件。
1.设置封闭区域,防止插件“污染”
//闭包限定在named 空 (function ($) {
})(window . jquery);
2.jQuery.fn.extend(object)扩展jQuery方法,制作插件。
//闭包限定在named 空 (function ($) {
$ . fn . extend({ & quot;突出显示& quot:函数(选项){//做点什么}
});
})(window . jquery);
3.给出插件默认参数,实现插件功能。
//闭包限定在named 空 (function ($) {
$ . fn . extend({ & quot;突出显示& quot:函数(选项){ var opts = $。extend({},defaluts,options);//使用jQuery.extend覆盖插件默认参数。
This.each(function () {//这是jQuery对象。
//遍历所有要高亮显示的dom,当是调用highlight()插件的集合时。
var $ this = $(this);//获取当前dom的jQuery对象,这里是当前循环的dom
//根据参数设置dom的样式
$this.css({
背景色:opts.background,
颜色:opts .前景
});
});
}
});//默认参数
var defaluts = {
前景:& # 39;红色& # 39;,
背景:& # 39;黄色& # 39;
};
})(window . jquery);
至此,高亮插件的基本功能已经具备。调用代码如下:
$(function () {
$(& quot;p & quot).高亮();//调用自定义高亮插件});
只能在这里直接调用,不能在chain中调用。我们知道jQuery可以被链式调用,也就是说,在一个jQuery对象上可以调用多个方法,比如:
$('# id & # 39).CSS({ margin top:& # 39;100像素& # 39;}).addAttr(& quot;标题& quot,& quot测试”);
但是我们上面的插件是不能这样链的。比如:$(& quot;p & quot).突出显示()。CSS({ margin top:& # 39;100像素& # 39;});//会报错找不到css方法,因为我的自定义插件完成函数后没有返回jQuery对象。接下来,返回jQuery对象,这样我们的插件也支持链式调用。(其实很简单,就是在我们执行完我们的插件代码的时候返回jQuery对象,和上面的代码没什么区别)
jquery怎么获取input file中的内容?
jquery获取inputfile中内容的方法:;$(“#conter”).val();//这样就能获取它的值了(也就是内容)。
1.jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库。jQuery设计的宗旨是“writeLess,DoMore”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
2.jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件.
插件使用方法?
1.使用script标签加载jquery框架2.使用script标签加载插件3.看插件是否有api,如果有的话按照api调用4.如果没有api,就自己看源码一般来说jquery插件的调用方法都是$(‘element’).plugName(param);其中element是你用选择选择的要执行插件方法的对象,plugName是你插件中的方法名称,param是插件方法的参数。当然,也有的插件不是这样调用的,也有的插件是需要你在html标签中加入以下class。具体还是要看你用的插件的api
详解如何在vue项目里正确地引用jquery和jquery-ui的插件?
vue-cli webpack全局引入jquery
1、首先在package.json里加入,
然后 nmp install
2、在webpack.base.conf.js里加入
3、在module.exports的最后加入
plugins:
4、然后一定要重新 run dev
5、在main.js 引入就ok了
在.vue文件中引入第三方非NPM模块
vue-cli引入外部文件
在 webpack.base.conf.js 中添加externals
externals 中 swiper 是键,对应的值一定的是插件 swiper.js 所定义的变量 Swiper :
之后再在根目录下的index.html文件里引入文件:<script src=”static/lib/swiper.js”></script>
这样子就可以在需要用到swiper.js的文件里加入这行代码:import Swiper from ‘swiper’,这样就能正常使用了。
前端页面的插件有哪些?
工具类
方便操作对象,数组等的工具库
underscore.js
lo-dash 与underscore.js的api基本一致。与underscore比其优势是,效率高;可自定义构建
Sugar 在原生对象上增加一些工具方法
functional.js 提够了一些Curry的支持
Watch.js 监视对象或属性的变化
bacon.js 函数式编程,cool
streamjs 用流的方式来对数组,对象进行系列操作
异步流程控制
eventproxy 朴灵出品
Arbiter.js 详细
发布订阅
q Promise风格的
Async.js
mock
Mock.js 生成随机数据和mock Ajax 请求
jquery-mockjax mock ajax请求
时间库
moment
datejs
浏览器探测
Bowser 探测具体浏览器和版本
ua-parser-js 探测具体浏览器和版本,操作系统,设备类型等
调试
console-polyfill 能放心的使用 console.log()之类的console方法
log 让控制台输出的log有样式
Konsole.js 在页面的一个元素里输出log信息 详细
uri.js uri操作
cookie 增删改cookie的工具库
director 前端路由库 详细
BigDecimal.js 提高精度的数字操作
JSDoc 根据javascript文件中注释的信息,生成API文档 详细
hotkeys 键盘事件的封装
MD5 用 MD5 的方式加密文件的库
浏览器增强类
让一些旧浏览器变牛逼的库
Selectivizr 让IE 6-8一些的css3选择器
ieBetter 让ie6-8有高级浏览器的特性
ExplorerCanvas 让IE8-的浏览器支持canvas
CSS3 Pie 让IE6-9支持border-radious,box-shadow,linear-gradient。 可以使用.htc文件(注意Mine type)或.js文件。在用Pie.js时,box-radious的元素有背景色时,不显示背景色。。。
formFive 让旧的浏览器支持HTML5表单的一些特性,如 placeholder,autofocus
https://github.com/anselmh/object-fit 让浏览器支持object-fit这css规则
HTML5 Cross Browser Polyfills 一堆Polyfills
flexibility 让旧的 IE 也支持 Flexbox
选择器增强
Lining.js 让浏览器实现类似::nth-line(), ::nth-last-line()的效果
未归类
prefixfree 用了它,写css时,就不需要加浏览器的前缀了
表单类
jquery-file-upload 上传文件组件 详细
zTree 文件树形视图控件
Treed 树编辑器。感觉展示的感觉很像思维导图
FileAPI 对文件选择框内的文件的一些处理
表单验证
.Validate 详细
jQuery-Validation-Engine
表单元素美化
uniform 提供对下拉框,单,复选框,按钮等表单元素的美化
select2 多选下拉框
selectivity 和unfirom比较类似
DropKick 下拉框,单,多选。外观比uniform好
switchery ios7风格的开关组件
nouislider 用滚动条来设置/控制(音量等)
range.css 美化input元素的外观
图片类
holderjs 生成占位图片
lazyload
imagesLoaded 选取的图片都加载好后执行调回
CSSgram 用CSS3的Filter实现Instagram滤镜的库
图标类
Icon Font汇总
SVG做的图标
svgicons
iconic
HYBICON 带交互效果。如 hover, click
HTML字符实体图标
http://www.amp-what.com/
transformicons 图标点击时,会有一些变换效果。如,加号变成叉号
css3patterns css3 做的可平铺纹理。浏览器兼容性不好。
浏览图片
fancybox 弹出查看图片,视屏等等 demo
yoxview 弹出查看图片,图片尺寸缩放很自然
图片墙
wookmark
UI 框架
WeUI 由微信官方设计团队为微信 Web 开发量身设计。
Framework7
UI 组件类
拖拽
dragula 支持Draggable,Dropable和Sortable。感觉比jqueryUI的轻量级,好用的样子
angular-dragula dragular 官方的 angular 版本
数据可视化(图表)
Echarts 百度出品
highcharts 功能强大。是收费的。
Plottable.JS 基于D3的一个图表库
flot 文档不给力
chartJs 中文文档 demo很漂亮,很清晰。比较轻量级。
ichartJs 中国的一个家伙搞的,感觉还不错。
时间选取组件
foundation-datepicker
DatePicker 一个简单的日历 详细
full calendar 支持脱放的方式来改变待办事宜的时间
Simple Events Calendar 外观很喜欢。收费 5$
jQuery ui datepicker 经典,不是很好看
pickadate 轻量级,手机友好的,漂亮。但貌似只能在弹出层中显示,而没有下拉这种方式显示。
zebra-datepicker 可配置性很强。但貌似只能在弹出在右上方。。。
bootstrap-datepicker bootstrap风格。
dateRangePicker 选取时间段。bootstrap风格。该组件依赖Twitter Bootstrap, Moment.js和jQuery.
自定义滚动条
perfect scrollbar 轻量级的滚动条。外观与mac上chrome的滚动条一样。
iscroll 在移动设备上用不错
加载(Loding)效果
CSS Spinners CSS做的
Loaders.css CSS做的
表格组件
jsGrid Data Grid。 详细
backgrid 基于Backbone.js的DataGrid
excellentexport 把表格的内容生成excel。兼容 Firefox, Chrome, IE6+
datatables 表格可交互(对内容进行排序,删除等)
handsontable 生成Excel外观的数据
JSpreadsheets 表格数据的组件库
选取颜色
Spectrum
分享到SNS
JiaThis 生成分享代码。
编辑器
ace 代码编辑器,可以用来做demo演示
ckeditor
ueditor 百度做的
tinymce 对html内容进行实时的编辑
summernote 在移动设备上用不错
通知组件
notie.js
HTML5播放器
jwplayer 被大量网站使用
html5media 简单的h5player,轻量级
jplayer 功能强太,可换肤
展示
Impress.js 各种旋转,和奇特的体验
fullPage 全屏显示。用滚轮来翻页 详细
zepto.fullpage 专注于移动端的fullPage.js,依赖Zepto
pagePiling 和fullPage类似
turn.js 做一本书,带漂亮的翻页的效果
幻灯
slidesjs 挺好用的,只是那幻灯导航的CSS都要自己写,呵呵 详细
iSlider 无任何插件依赖的手机平台javascript滑动组件 详细
bgstretcher 全屏幻灯,会随着页面大小的变化而变化。
Swiper 开源、免费、强大的移动端触摸滑动插件 Swiper中文网
coin-slider 兼容IE6。蛮好的~。不过其切换方式是一块块的。不能配置切换方式。。。
wowslider 幻灯切换时各种很炫的效果。收费。
cycle2 普通的幻灯,竟然不支持垂直滚动。。。
jcarousel 普通的幻灯,不兼容IE6
reveal 3d滚动。做ppt相当不错
nodePPT 国人做的,做ppt也相当不错。有些方面比 reveal做的还好。但生成导出的html有些问题
roundabout 3d切换,看的后面图片的边
弹出框
Magnific-Popup 兼容PC,Mobile。还不错,有5k+的star
layer 国人开发的,兼容ie6+。不喜欢其调用方式。
动画效果
mixitup 用漂亮的动画效果来完成排序和筛选
jQuery.Marquee 跑马灯效果
quickflip 卡片翻转效果
卡片翻转效果2 兼容性可以。写的比较简单:1,只支持x方向翻转 2,类名都是规定好的 3,只能被调用一次。 需要改写一下。我的改进版见这里
TheaterJS 模拟两个人在屏幕上对话
midnight.js 文字颜色随着背景变,屌炸了
color-animation jquery的颜色渐变动画插件。jquery的动画不支持颜色值的变化。改库提供了这个支持。
transit 对元素进行css的变换
tagcanvas 3D标签云效果 详细
iconate 图片切换动画
Snap.js 左/右侧导航的出现效果
CSS shake 抖动动画
ClickSpark.js 点击后的一些酷炫的效果
视觉差插件
scrollorama 比较简单
superscrollorama 能做的效果更多,但要用第三方Tween的库,使用起来比较复杂。
scrolldeck
flash
swfobj 能够自动检测PC、Mac机器上各种主流浏览器对Flash插件的支持情况。它使得插入Flash媒体资源尽量简捷、安全。而且它是非常符合搜索引擎优化的原则的。此外,它能够避免您的HTML、XHTML中出现object、embed等非标准标签,从而符合更加标准。 详细
抽奖
wScratchPad 刮刮卡刮奖效果
jqueryrotate 旋转插件。可以用来做转盘抽奖效果
用户体验增强类
Intro.js 用来介绍网站的功能很不错。也可以做新手引导。
blockUI Lolding组件。
simple-hint 提示信息。用css做的。兼容性IE 9+。
dotdotdot 文字溢出时,添加在文字末尾加省略号
jQuery-menu-aim 二级菜单的切换如Amazon主页上一样迅速
AnythingZoomer 放大镜功能
美化/高亮语法代码
google-code-prettify
DlHighlight 仅支持JavaScript、CSS、XML、HTML 这4语法高亮
please 按要求随机舒服的颜色
Awesomplete 输入的智能提示,自动补全
proTip 提示。感觉比 Bootstrap 的 tip 好
Hammerjs 手势库。封装了 Swipe, Tap, Pinch, Pan等手势
动画
velocity 提高Jquery动画的性能。以及颜色动画之类的新特性。
SVG
Snap.svg 操作 SVG 的 JS 库。号称 SVG 的 jQuery。demo
walkway 以动画的方式,渐渐地画出 SVG 的路径。
测试
Mocha
Chai
Should
Snoion
DeviceMock.js mock 设备。
其他类
ZeroClipboard 将内容复制到剪切板兼容主流浏览器的解决方案 详细
html2canvas html转化成canvas,可以用来做截图。详细
Ink 响应式html邮件框架
性能测试
抓取,解析RSS内容(不能跨域,所以后台要做代理,所谓的解析Rss其实就是解析xml)
jFeed
jRss 简单版的jFeed
scriptcam 与摄像头交互
cylon.js 机器人框架,支持35个平台
Masonry 一个瀑布流框架
devices.css 移动设备边框的外观。做原型的时候用不错。
Bootstrap相关类
Bootbox.js 对bootstrap的弹出框做的一些封装
免费皮肤
AdminLTE
JS Plugins仓库
jQuery Cards 高质量的 jQuery 插件网站
jster
node modules
npmrank Sort npm packages by page rank
YOU MIGHT NOT NEED JQUERY PLUGINS 不依赖 jQuery 的 js 插件。
awesome-nodejs
Libraries.io 各种语言的库
OniUI 去哪儿网做的一套基于Avalon的框架
常用的移动端框架
zepto.js
语法与jquery几乎一样,会jquery基本会zepto~
最新版本已经更新到1.16
iscroll.js
解决页面不支持弹性滚动,不支持fixed引起的问题~
实现下拉刷新,滑屏,缩放等功能~
最新版本已经更新到5.0
underscore.js
笔者没用过,不过听说好用,推荐给大家~
该库提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象。
最新版本已经更新到1.8.2
滑屏框架
适合上下滑屏、左右滑屏等滑屏切换页面的效果
slip.js
iSlider.js
fullpage.js
swiper.js
flex布局
flex布局目前可使用在移动中,并非所有的语法都全兼容,效果良好~