-
本篇文章主要介绍了js封装成插件的步骤方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧由于项目原因,工作一年多还没用js写过插件,项目太成熟,平时基本都是在使用已经封装好的功能插件。感觉自己好low......这两天想自己抽空写一个canvas画统计图与折现图的插件,所以就去网上学习了下如何封装.....虽然之前看了很多源码,但是感觉就算了解也是野路子.....什么是封装呢?我的理解就是 把一个功能单独做成一个组件,就像做饺子,以前做饺子必须自己先用面粉做饺子皮,再做饺子馅,然后再手工包饺子,但是现在人们发明了自动包饺子机器,虽然机器里面的每一步骤和你自己包饺子是一样的,但是实际上你现在需要做的就只有一件事,就是放原料。这边机器就是封装好的插件,而原料就是你要传的参数为什么要把js功能封装成插件呢?我觉得有以下几点吧 1、便于代码复用 2、避免各个相同功能组件的干扰,可能会有作用域的一些问题吧 3、便于维护,同时利于项目积累 4、不觉得一直复制粘贴很low么.......我在网上看到的封装好像有两种,一种是js的原生封装,一种是jquery的封装。这边我先讲一下原生封装吧。我们在封装的时候会把js代码放到一个自执行函数里面,这样可以防止变量冲突。1234567(function(){ ...... ...... }()} 然后再创建一个构造函数123456789(function(){ var demo = function(options){ ...... } }()) 把这个函数暴露给外部,以便全局调用123456(function(){ var demo = function(options){ ...... } window.demo = demo;}())其实现在你可以直接调用了,封装好了,虽然没实现什么功能1234var ss = new demo({ x:1, y:2});或者1234new demo({ x:2, y:3});然后传参怎么搞呢,我们一个插件一般有一些必选参数或者可选参数,在我看来可选参数不过就是在插件里面给了默认值罢了。我们传的参数会覆盖插件中的默认参数,可以用$.extend({})覆盖12345678910111213141516171819(function(){ var demo = function(options){ this.options = $.extend({ "x" : 1, "y" : 2, "z" : 3 },options) } window.demo = demo; }()) 然后你可以在在初始化构造函数的时候执行一些操作12345678910111213141516171819(function(){ var demo = function(options){ this.options = $.extend({ "x" : "1", "y" : "2", "z" : "3" },options); this.init(); }; demo.prototype.init = function(){ alert("x是"+this.options.x+" y是"+this.options.y+" z是"+this.options.z); }; window.demo = demo;}());new demo({ "x" :"5", "y" :"4"});</script>就是这样了。一个超级简单的封装 我这边有个疑问,extend只是jquery有吗,js对象有什么代替方法吗?晚点在看看............. 还有需要提的是封装js的时候我们要考虑周全,比如它的扩展性和兼容性,还有性能怎么样,还有没必要的就不需要封装了......要有选择性。现在网上已经完成的插件数不胜数,而且功能又十分强大,但是恰恰是这点,有的时候一个很大的插件我们只用到很小的一部分,那么就需要我们自己修改成适合我们自己的了,而且有些项目的风格和现在的插件风格也不同,所以关键是要适合自己的项目。以上就是本文的全部内容,希望对大家的学习有所帮助转载自https://www.jb51.net/article/123369.htm
-
jQuery UI 1.13.0-rc.3已发布,与几周前发布的rc2相比,此版本的唯一变化是针对主题的修复。由于CSS的特殊性问题,1.13.0-rc.2中的空白图标实际上并不是空白的;rc3增加了一个相关选择器的权重 (specificity) 来解决这个问题。另一组问题也是由对主题的改动而引起的,这些改动本意是修复其他问题以及改进各种主题的外观。不幸的是,因为这些改动并不完整,因此导致了更大的问题。鉴于jQuery UI的维护状态,开发团队决定回滚这些改动。此外,开发者也可以更轻松地从 jQuery UI 1.12升级到1.13。
-
jQuery动画的三种方式今天的知识点就一个jQuery动画的三种表示方式:默认显示和隐藏方式滑动显示和隐藏方式淡入淡出显示和隐藏方式1. 默认的显示和隐藏方式1.1. show([speed,[easing],[fn]])->如果选择的元素是可见的,这个方法将不会改变任何东西。无论这个元素是通过hide()方法隐藏的还是在CSS里设置了display:none;,这个方法都将有效。1.2. hide([speed,[easing],[fn]])->隐藏,如果选择的元素是隐藏的,这个方法将不会改变任何东西。1.3. toggle([speed],[easing],[fn])->如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。1. speed:动画的速度,可以自定义值(如:1000)毫秒数,它还有三个预定义的值(“slow”,“normal”, “fast”)2. easing:用来指定切换效果,默认是"swing",可用参数"linear" ->swing:动画执行时效果是 先慢,中间快,最后又慢 -> linear:动画执行时速度是匀速的3. fn:在动画完成时执行的函数,每个元素执行一次。以下所有的的speed,easing,function都是一样的2.滑动显示和隐藏方式2.1. slideDown([speed],[easing],[fn])->通过高度变化(向下增大)来动态地显示所有匹配的元素。2.2. slideUp([speed,[easing],[fn]])->通过高度变化(向上减小)来动态地隐藏所有匹配的元素2.3. slideToggle([speed],[easing],[fn])->与toggle功能相同,只是显示的动画效果不同3.淡入淡出显示和隐藏方式3.1. fadeIn([speed],[easing],[fn])->淡入效果(渐渐浮现)3.2. fadeOut([speed],[easing],[fn])->淡出效果(渐渐隐藏)3.3. fadeToggle([speed,[easing],[fn]])->与toggle功能相同,只是显示的动画效果不同<img id="imgpic" src="../img/test.jpg" width="600px" height="600px"/>//默认方式 $("#imgpic").toggle("slow");// $("#imgpic").show(5000,"linear");//5秒后匀速显示 $("#imgpic").hide(5000,"swing");//5秒后隐藏,速度先先慢,中间快,最后又慢
-
原始模板工程为物品领用:加入如下代码报错信息如下jquery.min.js:1 Failed to load resource: net::ERR_PROXY_CONNECTION_FAILED qrcode.min.js:1 Failed to load resource: net::ERR_PROXY_CONNECTION_FAILED index.html:1 Uncaught ReferenceError: QRCode is not defined at index.html:1 log.js:24 [HMR] Waiting for update signal from WDS... react-dom.development.js:25195 Download the React DevTools for a better development experience: https://fb.me/react-devtools react-hot-loader.development.js:2333 React-Hot-Loader: react--dom patch is not detected. React 16.6+ features may not work. AppContainer @ react-hot-loader.development.js:2333 index.js:16 getAuthCode success = client:77 [WDS] Hot Module Replacement enabled. client:148 [WDS] Warnings while compiling. warnings @ client:148 onmessage @ socket.js:41 EventTarget.dispatchEvent @ sockjs.js:170 (anonymous) @ sockjs.js:883 SockJS._transportMessage @ sockjs.js:881 EventEmitter.emit @ sockjs.js:86 WebSocketTransport.ws.onmessage @ sockjs.js:2957 client:154 ./src/common/jquery.min.js Module Error (from C:/Users/xxx/AppData/Roaming/WeCode-IDE/wecode-eslint-config/node_modules/eslint-loader/dist/cjs.js): c:\Users\xxx\WeCodeProject\myapp\src\common\jquery.min.js 2:328 error Empty block statement no-empty 2:1423 warning Unary operator '++' used no-plusplus 2:2383 warning Unary operator '--' used no-plusplus 2:2571 warning Unary operator '++' used no-plusplus 2:2843 warning Unary operator '++' used no-plusplus 2:4570 warning Unary operator '++' used no-plusplus 2:4783 warning Unary operator '++' used no-plusplus 2:5630 warning Expected a conditional expression and instead saw an assignment no-cond-assign 2:5634 warning Unary operator '++' used no-plusplus 2:5819 warning Unary operator '--' used no-plusplus 2:6058 error Empty block statement no-empty 2:6135 error Empty block statement no-empty 2:6299 warning Unary operator '++' used no-plusplus 2:6361 error 's' is assigned a value but never used no-unused-vars 2:6548 warning Unary operator '++' used no-plusplus 2:6984 warning Unary operator '++' used no-plusplus 2:7115 warning Unary operator '++' used no-plusplus 2:7849 warning Unary operator '++' used no-plusplus 2:7902 warning Unary operator '--' used no-plusplus 2:8725 warning Unary operator '++' used no-plusplus 2:9428 error Unnecessary escape character: \- no-useless-escape 2:9454 error Unnecessary escape character: \- no-useless-escape 2:9563 error Unnecessary escape character: \- no-useless-escape 2:9658 error Unnecessary escape character: \/ no-useless-escape 2:9743 error Unnecessary escape character: \- no-useless-escape 2:10062 error 'u' is defined but never used no-unused-vars 2:11949 warning Unary operator '--' used no-plusplus 2:11963 warning Unary operator '++' used no-plusplus 2:12329 warning Unary operator '++' used no-plusplus 2:12384 warning Unary operator '--' used no-plusplus 2:12479 warning Unary operator '--' used no-plusplus 2:12728 warning Expected '===' and instead saw '==' eqeqeq 2:13335 warning Expected a conditional expression and instead saw an assignment no-cond-assign 2:13862 error 'ActiveXObject' is not defined no-undef 2:14448 warning Unary operator '++' used no-plusplus 2:14557 warning Unary operator '++' used no-plusplus 2:14989 warning Unary operator '++' used no-plusplus 2:15113 warning Unary operator '++' used no-plusplus 2:15119 warning Unary operator '++' used no-plusplus 2:15151 warning Unary operator '++' used no-plusplus 2:15158 warning Unary operator '++' used no-plusplus 2:15246 warning Unary operator '++' used no-plusplus 2:15442 warning Unary operator '++' used no-plusplus 2:15771 warning Unary operator '++' used no-plusplus 2:16045 warning Unary operator '++' used no-plusplus 2:16525 error Empty block statement no-empty 2:16984 warning Unary operator '++' used no-plusplus 2:17448 warning Unary operator '--' used no-plusplus 2:17458 warning Unary operator '--' used no-plusplus 2:19 warnings @ client:154 onmessage @ socket.js:41 EventTarget.dispatchEvent @ sockjs.js:170 (anonymous) @ sockjs.js:883 SockJS._transportMessage @ sockjs.js:881 EventEmitter.emit @ sockjs.js:86 WebSocketTransport.ws.onmessage @ sockjs.js:2957 client:154 ./src/common/qrcode.min.js Module Error (from C:/Users/xxx/AppData/Roaming/WeCode-IDE/wecode-eslint-config/node_modules/eslint-loader/dist/cjs.js): ... 更多错误信息见附件
-
【文章的来源(华为云社区)】一、jQuery动画效果jQuery提供的一组网页中常见的动画效果,这些动画是标准的、有规律的效果;同时还提供给我们了自定义动画的功能。1、显示动画方式一:无参数,表示让指定的元素直接显示出来。其实这个方法的底层就是通过display: block;实现的。$("div").show();方式二:通过控制元素的宽高、透明度、display属性,逐渐显示,例如:3秒后显示完毕。$('div').show(3000);方式三:和方式二类似,也是通过控制元素的宽高、透明度、display属性,逐渐显示。$("div").show("slow");参数说明:slow 慢:600ms normal 正常:400ms fast 快:200ms方式四:动画执行完后,立即执行回调函数。//show(毫秒值,回调函数; $("div").show(5000,function () { alert("动画执行完毕!"); });总结:上面的四种方式几乎一致:参数可以有两个,第一个是动画的执行时长,第二个是动画结束后执行的回调函数。2、隐藏动画方式参照上面的show()方法的方式。如下: $(selector).hide(); $(selector).hide(1000); $(selector).hide("slow"); $(selector).hide(1000, function(){});练习 : 实现点击按钮显示盒子,再点击按钮隐藏盒子实现点击按钮显示盒子,再点击按钮隐藏盒子:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> #box{ width: 200px; height: 200px; background-color: green; border: 1px solid red; display: none; } </style> </head> <body> <div id="box"> </div> <button id="btn">隐藏</button> </body> <script src="jquery-3.3.1.js"></script> <script type="text/javascript"> //jquery 提供了一些方法 show() hide() 控制元素显示隐藏 var isShow = true; $('#btn').click(function(){ if(isShow){ $('#box').show('slow',function(){ $(this).text('盒子出来了'); $('#btn').text('显示'); isShow = false; }) }else{ $('#box').hide(2000,function(){ $(this).text(''); $('#btn').text('隐藏'); isShow = true; }) } }) </script> </html>3、开关式显示隐藏动画$('#box').toggle(3000,function(){});显示和隐藏的来回切换采用的是toggle()方法:就是先执行show(),再执行hide()。代码如下:$('#btn').click(function(){ $('#box').toggle(3000,function(){ $(this).text('盒子出来了'); if ($('#btn').text()=='隐藏') { $('#btn').text('显示'); }else{ $('#btn').text('隐藏'); } }); })4、滑入和滑出1、滑入动画效果:(类似于生活中的卷帘门):下拉动画,显示元素。$(selector).slideDown(speed, 回调函数);注意:省略参数或者传入不合法的字符串,那么则使用默认值:400毫秒(同样适用于fadeIn/slideDown/slideUp)2、滑出动画效果: 上拉动画,隐藏元素。$(selector).slideUp(speed, 回调函数);3、滑入滑出切换动画效果:$(selector).slideToggle(speed, 回调函数);代码如下:示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> div { width: 300px; height: 300px; display: none; background-color: green; } </style> <script src="jquery-3.3.1.js"></script> <script> $(function () { //点击按钮后产生动画 $("button:eq(0)").click(function () { //滑入动画: slideDown(毫秒值,回调函数[显示完毕执行什么]); $("div").slideDown(2000, function () { alert("动画执行完毕!"); }); }) //滑出动画 $("button:eq(1)").click(function () { //滑出动画:slideUp(毫秒值,回调函数[显示完毕后执行什么]); $("div").slideUp(2000, function () { alert("动画执行完毕!"); }); }) $("button:eq(2)").click(function () { //滑入滑出切换(同样有四种用法) $("div").slideToggle(1000); }) }) </script> </head> <body> <button>滑入</button> <button>滑出</button> <button>切换</button> <div></div> </body> </html>5、淡入淡出动画1、淡入动画效果:让元素以淡淡的进入视线的方式展示出来。 $(selector).fadeIn(speed, callback);2、淡出动画效果:让元素以渐渐消失的方式隐藏起来$(selector).fadeOut(1000);3、淡入淡出切换动画效果:通过改变透明度,切换匹配元素的显示或隐藏状态。$(selector).fadeToggle('fast', callback);参数的含义同show()方法。代码如下:示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> div { width: 300px; height: 300px; display: none; /*透明度*/ opacity: 0.5; background-color: red; } </style> <script src="jquery-3.3.1.js"></script> <script> $(function () { //点击按钮后产生动画 $("button:eq(0)").click(function () { // //淡入动画用法1: fadeIn(); 不加参数 $("div").fadeIn(); // //淡入动画用法2: fadeIn(2000); 毫秒值 // $("div").fadeIn(2000); // //通过控制 透明度和display //淡入动画用法3: fadeIn(字符串); slow慢:600ms normal正常:400ms fast快:200ms // $("div").fadeIn("slow"); // $("div").fadeIn("fast"); // $("div").fadeIn("normal"); //淡入动画用法4: fadeIn(毫秒值,回调函数[显示完毕执行什么]); // $("div").fadeIn(5000,function () { // alert("动画执行完毕!"); // }); }) //滑出动画 $("button:eq(1)").click(function () { // //滑出动画用法1: fadeOut(); 不加参数 $("div").fadeOut(); // //滑出动画用法2: fadeOut(2000); 毫秒值 // $("div").fadeOut(2000); //通过这个方法实现的:display: none; // //通过控制 透明度和display //滑出动画用法3: fadeOut(字符串); slow慢:600ms normal正常:400ms fast快:200ms // $("div").fadeOut("slow"); // $("div").fadeOut("fast"); // $("div").fadeOut("normal"); //滑出动画用法1: fadeOut(毫秒值,回调函数[显示完毕执行什么]); // $("div").fadeOut(2000,function () { // alert("动画执行完毕!"); // }); }) $("button:eq(2)").click(function () { //滑入滑出切换 //同样有四种用法 $("div").fadeToggle(1000); }) $("button:eq(3)").click(function () { //改透明度 //同样有四种用法 $("div").fadeTo(1000, 0.5, function () { alert(1); }); }) }) </script> </head> <body> <button>淡入</button> <button>淡出</button> <button>切换</button> <button>改透明度为0.5</button> <div></div> </body> </html>6、自定义动画语法:$(selector).animate({params}, speed, callback);作用:执行一组CSS属性的自定义动画。第一个参数表示:要执行动画的CSS属性(必选)第二个参数表示:执行动画时长(可选)第三个参数表示:动画执行完后,立即执行的回调函数(可选)代码如下:示例:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> div { position: absolute; left: 20px; top: 30px; width: 100px; height: 100px; background-color: green; } </style> <script src="jquery-3.3.1.js"></script> <script> jQuery(function () { $("button").click(function () { var json = {"width": 500, "height": 500, "left": 300, "top": 300, "border-radius": 100}; var json2 = { "width": 100, "height": 100, "left": 100, "top": 100, "border-radius": 100, "background-color": "red" }; //自定义动画 $("div").animate(json, 1000, function () { $("div").animate(json2, 1000, function () { alert("动画执行完毕!"); }); }); }) }) </script> </head> <body> <button>自定义动画</button> <div></div> </body> </html>7、停止动画$(selector).stop(true, false);参数说明:第一个参数: true:后续动画不执行。 false:后续动画会执行。 第二个参数: true:立即执行完成当前动画。 false:立即停止当前动画。PS:参数如果都不写,默认两个都是false。实际工作中,直接写stop()用的多。示例:鼠标悬停,弹出下拉菜单:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> * { margin: 0; padding: 0; } ul { list-style: none; } .wrap { width: 330px; height: 30px; margin: 100px auto 0; padding-left: 10px; background-color: pink; } .wrap li { background-color: green; } .wrap > ul > li { float: left; margin-right: 10px; position: relative; } .wrap a { display: block; height: 30px; width: 100px; text-decoration: none; color: #000; line-height: 30px; text-align: center; } .wrap li ul { position: absolute; top: 30px; display: none; } </style> <script src="jquery-3.3.1.js"></script> <script> //入口函数 $(document).ready(function () { //需求:鼠标放入一级li中,让他里面的ul显示。移开隐藏。 var jqli = $(".wrap>ul>li"); //绑定事件 jqli.mouseenter(function () { $(this).children("ul").stop().slideDown(1000); }); //绑定事件(移开隐藏) jqli.mouseleave(function () { $(this).children("ul").stop().slideUp(1000); }); }); </script> </head> <body> <div> <ul> <li> <a href="javascript:void(0);">一级菜单1</a> <ul> <li><a href="javascript:void(0);">二级菜单2</a></li> <li><a href="javascript:void(0);">二级菜单3</a></li> <li><a href="javascript:void(0);">二级菜单4</a></li> </ul> </li> <li> <a href="javascript:void(0);">二级菜单1</a> <ul> <li><a href="javascript:void(0);">二级菜单2</a></li> <li><a href="javascript:void(0);">二级菜单3</a></li> <li><a href="javascript:void(0);">二级菜单4</a></li> </ul> </li> <li> <a href="javascript:void(0);">三级菜单1</a> <ul> <li><a href="javascript:void(0);">三级菜单2</a></li> <li><a href="javascript:void(0);">三级菜单3</a></li> <li><a href="javascript:void(0);">三级菜单4</a></li> </ul> </li> </ul> </div> </body> </html>上方代码中,关键的地方在于,用了stop函数,再执行动画前,先停掉之前的动画。
-
一、概要近日研究人员发现apache jQuery-File-Upload <= v9.22.0中存在未经身份验证的任意文件上载漏洞(CVE-2018-9206)可以导致远程代码执行,该漏洞exp已被公布,建议涉及的用户尽快完成漏洞修复。jQuery-File-Upload是一个应用广泛的文件上传工具,该漏洞的主要原因为jQuery File Upload的安全限制被绕过,通过该漏洞攻击者可上传web shell进而造成远程命令执行,漏洞威胁等级为严重。参考链接:https://www.zdnet.com/article/zero-day-in-popular-jquery-plugin-actively-exploited-for-at-least-three-years/#ftag=RSSbaffb68二、漏洞级别漏洞级别:【严重】(说明:漏洞级别共四级:一般、重要、严重、紧急。)三、影响范围漏洞影响Apache jQuery-File-Upload 9.22.0及以下版本。四、安全建议官方已经在9.22.1更新中修复该漏洞,请及时更新。更新链接:https://github.com/blueimp/jQuery-File-Upload注意:修复漏洞前请将资料备份,并进行充分测试。
-
jQuery.i18n.properties 简介 [color=rgb(51,51,51)]jQuery.i18n.properties 是一款轻量级的 jQuery 国际化插件。与 Java 里的资源文件类似,jQuery.i18n.properties 采用 .properties 文件对 JavaScript 进行国际化。jQuery.i18n.properties 插件根据用户指定的(或浏览器提供的 )语言和国家编码(符合 ISO-639 和 ISO-3166 标准)来解析对应的以“.properties”为后缀的资源文件。 [color=rgb(51,51,51)]总的来说,jQuery.i18n.properties 有一下一些特点: 1.使用 Java 标准的 .properties 文件作为资源文件,资源文件命名有以下三种格式: basename_properties basename_language.properties basename_language_country.properties 2.使用 ISO-639 作为语言编码标准,ISO-3166 作为国家名称编码标准 3.按顺序加载默认资源文件和指定语言环境的资源文件,保证默认值始终可用 4.未指定语言环境时使用浏览器提供的语言 5.可以在资源字符串中使用占位符(例如:hello= 你好 {0}! 今天是 {1}。) 6.资源文件中的 Key 支持命名空间(例如:com.company.msgs.hello = Hello!) 7.支持跨行的值 8.可以以 JavaScript 变量(或函数)或 Map 的方式使用资源文件中的 Key jQuery.i18n.properties(settings) 选项描述类型可选?name资源文件的名称,例如 strings 或 [strings1,strings2],前者代表一个资源文件,后者代表资源文件数组。String 或 String[]否path资源文件所在目录的路径String是mode加载模式:“vars”表示以 JavaScript 变量或函数的形式使用资源文件中的 Key,“map”表示以 Map 的方式使用资源文件中的 Key,“both”表示可以同时使用两种方式。如果资源文件中的 Key 包含 JavaScript 的关键字,则只能采用“map”。默认值是“vars”。String是languageISO-639 指定的语言编码(如:“en”表示英文、“zh”表示中文),或同时使用 ISO-639 指定的语言编码和 ISO-3166 指定的国家编码(如:“en_US”,“zh_CN”等)。如果不指定,则采用浏览器报告的语言编码。String是cache指定浏览器是否对资源文件进行缓存,默认为 false。boolean是encoding加载资源文件时使用的编码。默认为 UTF-8。String是callback代码执行完成时运行的回调函数function是
推荐直播
-
华为AI技术发展与挑战:集成需求分析的实战指南
2024/11/26 周二 18:20-20:20
Alex 华为云学堂技术讲师
本期直播将综合讨论华为AI技术的发展现状,技术挑战,并深入探讨华为AI应用开发过程中的需求分析过程,从理论到实践帮助开发者快速掌握华为AI应用集成需求的框架和方法。
去报名 -
华为云DataArts+DWS助力企业数据治理一站式解决方案及应用实践
2024/11/27 周三 16:30-18:00
Walter.chi 华为云数据治理DTSE技术布道师
想知道数据治理项目中,数据主题域如何合理划分?数据标准及主数据标准如何制定?数仓分层模型如何合理规划?华为云DataArts+DWS助力企业数据治理项目一站式解决方案和应用实践告诉您答案!本期将从数据趋势、数据治理方案、数据治理规划及落地,案例分享四个方面来助力企业数据治理项目合理咨询规划及顺利实施。
去报名
热门标签