前端编程提高之旅(一)—-插件

最后更新于:2022-04-01 09:36:49

平日收集有价值的网页颇多,而收集资料并不是一件快乐的事情,反而越多越给内心压力,困扰自己的同时,也错失了提高的时机。因此此系列文章意在探讨前端的编程所感,亦是疏解内心压力,自我提高的途径。此偏文章涉及内容均来自[网友博客](http://blog.csdn.net/blatar/article/category/1229834)。 示例一: ~~~ <!DOCTYPE html > <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>bar</title> <script type="text/javascript" src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script> <style type="text/css"> #time_back{width:300px;height:20px;border:1px solid #246;background:#CCC} #time_bar{width:0;height:20px;background:#470;color:#FFF;text-align:right;} </style> <script type="text/javascript"> $(document).ready(function(){ $("#input_time").change(function(){//输入框中数值一旦变化,则触发change函数 var rate = $(this).attr("value"); changebar("#time_bar",rate,"red"); }); /** * 更新进度条 * @ param obj 进度条id * @ param rate 进度,0-100间的整数 * @ param deadColor 当进度超过一定值(默认80)的颜色 */ function changebar(obj,rate,deadColor){ if(undefined!=deadColor&&rate>80){ $(obj).css({"background":deadColor}) } rate = rate%100 + "%"; $(obj).animate({width:rate},1000); $(obj).html(rate); } }); </script> <body> 日期:<div id="time_back" ><div id="time_bar" ></div></div> <input type="text" id="input_time" /> </body> </html> ~~~ **这个例子制作工具条的例子,非常简单。外层div,内层嵌套一个div,用animate函数设置内层背景颜色和文字,通过change方法触发使得整个页面呈现出响应和动态的效果。** 示例二: ~~~ $(document).ready(function(){ //滚动事件,滚动window元素时,调用滚动事件 $(window).scroll(function(){ //显示滚动条位置 $(".fixed").html(document.body.scrollTop||document.documentElement.scrollTop); var t = document.body.scrollTop||document.documentElement.scrollTop; //当导航条不可见时,重新定义导航条位置 if(t>100){//100为导航栏高度 $("#nav").css({ "position":"fixed", "top" :"0px", "left" :"0px" }); }else{ //回到导航条原来位置时,还原导航条位置 $("#nav").css({ "position":"", "top" :"", "left" :"" }); } }); }); ~~~ **这段代码则是通过滑动滚动条来触发函数,并且通过导航与浏览器顶部的距离作为条件,修改id为nav的位置,意在使nav这个元素始终保持在视野中的顶部。** 示例三: ~~~ $(document).ready(function(){ // 初始化内容 for(var i = 0 ; i < 3 ; i++){ $(".flow").each(function(){ $(this).append("<div style=\"width:90%;height:"+getRandom(200,300)+"px;margin:5px auto;background:#159;\"></div>"); }); } $(window).scroll(function(){ // 被卷去的高度 var scrollTop = document.body.scrollTop||document.documentElement.scrollTop; // 页面高度 var pageHeight = $(document).height(); // 可视区域高度 var viewHeight = $(window).height(); //alert(viewHeight); //当滚动到底部时 if((scrollTop+viewHeight)>(pageHeight-20)){ if(scrollTop<1000){//防止无限制的增长 for(var i = 0 ; i < 2 ; i++){ $(".flow").each(function(){ $(this).append("<div style=\"width:90%;height:"+getRandom(200,300)+"px;margin:5px auto;background:#159;\"></div>"); }); } } } }); }); /* * 获取指定范围随机数 * @param min,最小取值 * @param max,最大取值 */ function getRandom(min,max){ //x上限,y下限 var x = max; var y = min; if(x<y){ x=min; y=max; } var rand = parseInt(Math.random() * (x - y + 1) + y); return rand; } ~~~   **这段代码是典型瀑布流构造的代码,只需要加入图片到div内部即可。通过滚动条触发函数,使得在一定范围内,随机加载div宽度,连接到原有div之后,构成边拉边加载的效果。** 示例四: ~~~ $.extend({ wordScroll:function(opt,callback){ //alert("suc"); this.defaults = { objId:"", width:300, // 每行的宽度 height:100, // div的高度 liHeight:25, // 每行高度 lines:2, // 每次滚动的行数 speed:1000, // 动作时间 interval:2000, // 滚动间隔 picTimer:0, // 间隔句柄,不需要设置,只是作为标识使用 isHorizontal:false // 是否横向滚动 } //参数初始化,看是否有新的参数传入,传入则更新初始化设置 var opts = $.extend(this.defaults,opt); // 纵向横向通用 $("#"+opts.objId).css({ width:opts.width, height:opts.height, "min-height":opts.liHeight+"px", "line-height":opts.liHeight+"px", overflow:"hidden" }); $("#"+opts.objId+" li").css({ height:opts.liHeight }); if(opts.lines==0) opts.lines=1; // 横向滚动 if(opts.isHorizontal){ $("#"+opts.objId).css({ width:opts.width*opts.lines + "px" }); $("#"+opts.objId+" li").css({ "display":"block", "float":"left", "width":opts.width + "px" });//水平则行内显示 $("#"+opts.objId+" ul").css({ width:$("#"+opts.objId).find("li").size()*opts.width + "px"// 输出li选择器的数量,乘以宽度 }); // 横向使用,不够一屏则不滚动 if($("#"+opts.objId).find("li").size()<=opts.lines) return; var scrollWidth = 0 - opts.lines*opts.width; }else{ //如果不够一屏内容 则不滚动 if($("#"+opts.objId).find("li").size()<=parseInt($("#"+opts.objId).height()/opts.liHeight,10)) return; var upHeight=0-opts.lines*opts.liHeight; } // 横向滚动 function scrollLeft(){ $("#"+opts.objId).find("ul:first").animate({ marginLeft:scrollWidth },opts.speed,function(){ for(i=1;i<=opts.lines;i++){ $("#"+opts.objId).find("li:first").appendTo($("#"+opts.objId).find("ul:first")); } $("#"+opts.objId).find("ul:first").css({marginLeft:0}); }); }; // 纵向滚动 function scrollUp(){ $("#"+opts.objId).find("ul:first").animate({ marginTop:upHeight },opts.speed,function(){ for(i=1;i<=opts.lines;i++){ $("#"+opts.objId).find("li:first").appendTo($("#"+opts.objId).find("ul:first")); } $("#"+opts.objId).find("ul:first").css({marginTop:0}); }); }; //鼠标滑上焦点图时停止自动播放,滑出时开始自动播放 $("#"+opts.objId).hover(function() { clearInterval(opts.picTimer); },function() { opts.picTimer = setInterval(function() { // 判断执行横向或纵向滚动 if(opts.isHorizontal) scrollLeft(); else scrollUp(); },opts.interval); // 自动播放的间隔,单位:毫秒 }).trigger("mouseleave"); } }) ~~~ **这段代码是一个使文字横向或者纵向滚动的插件,如果想了解清楚插件的工作原理大体需要看这[两个](http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729563.html)[网页](http://www.css88.com/jqapi-1.9/jQuery.extend/)了解了extend函数的用法即可。在了解extend用法之后,就可以找一下插件了如上前三段代码的联系了。jquery插件与如上三段代码的区别在于通过extend方法后,内部的对象wordScroll就成了jquery包含的对象了,引用的时候可以这样:** ~~~ $.wordScroll({ }); ~~~ **插件内都会设置一些default属性,当有部分变量传入时,与默认重复的会被覆盖成传入的,未传入的仍会保持原样。如下代码实现此功能:** ~~~ var opts = $.extend(this.defaults,opt); ~~~ 剩余内容就是上述四段代码的共同点了,在代码内完成结构、样式、交互逻辑代码的设计,也就是说,用上extend函数和如上一行代码,就可以轻松实现jquery功能的扩展即插件。此篇引用博主的文章前几篇都是插件的使用。插件的确增加了“简单可依赖”的特点,增加了封装性,但封装涉及交互、样式和结构,降低了代码的可读性,以此看来插件的开发是把双刃剑。
';