歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> jQuery插件的實現

jQuery插件的實現

日期:2017/3/1 10:32:40   编辑:Linux編程
一直在研究jQuery的插件問題,發現了其中一些問題 ,寫在這裡供以後記憶,以下是js代碼:

[html]
  1. <script type="text/javascript">
  2. if (jQuery)(function($) {
  3. //定義Testl類 屬性為params
  4. var liCount = 0 ;
  5. var Test = function(){
  6. this.params = { "daley": 5 };
  7. this.index = 0;
  8. this.enable = true;
  9. };
  10. //定義方法為create 參數是src(jQuery對象 指向div) data是對象傳進來的{daley:3}
  11. Test.prototype = {
  12. create : function(src,data){
  13. var self = this;
  14. self.src = src;
  15. //將Test的屬性和傳入的data融合返回對象(data將覆蓋this.params)
  16. self.params = $.extend({}, self.params,data);
  17. //添加業務邏輯
  18. src.addClass("moive");
  19. var w = src.width();
  20. var h = src.height();
  21. var liArray = src.find("li");
  22. liCount = liArray.size();
  23. if (liCount > 1) {
  24. var str = '<div >';
  25. for (var i = 1; i <= liCount; i++) {
  26. str += '<span class="txt">' + i + '</span>';
  27. }
  28. str += '</div>';
  29. src.append(str);
  30. src.find("li:gt(0)").hide();//大於0的li元素隱藏
  31. src.find("span:first").addClass("selected");
  32. var spanArray = src.find("span");
  33. spanArray.bind("click", function() {
  34. self.index = $(this).text() - 1;
  35. if (self.index >= self.count) return;
  36. spanArray.removeClass("selected");
  37. $(this).addClass('selected');
  38. liArray.hide().eq(self.index).fadeIn("slow");
  39. //實現圖片淡出 也可以自定義其他圖片顯示效果
  40. });
  41. self.t = setTimeout(function() { self.showAuto(); }, self.params.daley * 1000);
  42. src.hover(function() {
  43. self.enable = false;
  44. clearTimeout(self.t);
  45. },
  46. function(){
  47. self.enable = true;
  48. clearTimeout(self.t);
  49. self.t = setTimeout(function() { self.showAuto(); },self.params.daley * 1000);
  50. });
  51. }
  52. },
  53. showAuto: function() {
  54. var self = this;
  55. if (self.enable) {
  56. selfself.index = self.index >= (liCount - 1) ? 0 : self.index + 1;
  57. self.src.find("span").eq(self.index).trigger('click');
  58. clearTimeout(self.t);
  59. self.t = setTimeout(function() { self.showAuto(); }, self.params.daley * 1000);
  60. }
  61. }
  62. //業務邏輯結束
  63. };
  64. $.fn.extend({"xdMoive":function(method){
  65. var create1 = function(src, data){
  66. if(src.tagName.toLowerCase()!='div')
  67. return;
  68. src1=$(src); //將DOM對象轉換為jQuery對象
  69. if(src1.data("xdMoive")!=undefined)
  70. return;
  71. var test = new Test();
  72. test.create(src1,data);
  73. src1.data("xdMoive",test);
  74. }
  75. switch(method) {
  76. default:
  77. $(this).each(function(){
  78. //alert(this.tagName.toLowerCase());
  79. create1(this,method);//此時this是DOM對象 指向div
  80. });
  81. break;
  82. }
  83. //alert($(this).attr("class"));
  84. return $(this);//此時$(this)是jQuery對象 指向div
  85. }
  86. });
  87. })(jQuery);
  88. //調用閉包方法
  89. $(function(){
  90. $(".div").xdMoive({daley:2});
  91. });
  92. </script>

此方法實現了圖片的淡出效果;總結了一個自己的jQuery的插件框架,自己日常用足夠。在此希望高手指出不足之處,小弟謝過。。。

以下是個人總結的jQuery的插件框架:

[javascript]
  1. if(jQuery)(function($){
  2. var Ctl=function(){
  3. this.params={width:"100px", height:"10px", text:"test"}
  4. }
  5. Ctl.prototype={
  6. create:function(src, data) {
  7. var self = this;
  8. self.src = src;
  9. self.params = $.extend({}, self.params,data);
  10. //業務邏輯的實現
  11. src.width(self.params.width);
  12. src.height(self.params.height);
  13. src.val(self.params.text);
  14. }
  15. };
  16. $.fn.extend({"xdText":function(method){
  17. var create1 = function(src, data){
  18. if(src.tagName.toLowerCase()!='textarea')
  19. return;
  20. src1=$(src);
  21. if(src1.data("xdText")!=undefined)
  22. return;
  23. var ctl=new Ctl();
  24. ctl.create(src1,data);
  25. src1.data("xdText",ctl);
  26. }
  27. switch(method) {
  28. default://默認情況下執行
  29. $(this).each(function(){ //$(this)指向的是xdTest本身<pre name="code" class="javascript"> create1(this,method);//將調用此方法的DOM對象傳入(這裡的this指向的是textarea),method指向的是{text:"..",
  30. //height:"100px"}<pre name="code" class="javascript"><pre name="code" class="javascript"> });
  31. break;
  32. }
  33. //alert($(this).height()+'qqq222');
  34. return $(this);//返回調用時候傳入的DOM對象
  35. }
  36. });
  37. })(jQuery)
  38. $(function(){//調用此插件的對象
  39. $("textarea").xdText({text:"hello world",height: "100px"});
  40. });

就目前個人的應用中  感覺夠用了 ,有高手看見請指出不足之處,,謝謝。

			
Copyright © Linux教程網 All Rights Reserved