课程表

jQuery UI 基础

jQuery UI 主题

jQuery UI 部件库

jQuery UI 参考手册

jQuery UI 实例

工具箱
速查手册

部件库(Widget Factory)

当前位置:免费教程 » JS/JS库/框架 » jQuery UI

使用与所有 jQuery UI 小部件相同的抽象化来创建有状态的 jQuery 插件。

如需了解更多有关部件库(Widget Factory)的细节,请查看 API 文档 部件库(Widget Factory)

默认功能

该演示展示了一个简单的使用部件库(jquery.ui.widget.js)创建的自定义的小部件。

三个区块是以不同的方式初始化的。点击改变他们的背景颜色。查看源码及注释理解工作原理。

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>jQuery UI 部件库(Widget Factory) - 默认功能</title>
  6. <link rel="stylesheet" href="//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css">
  7. <script src="//code.jquery.com/jquery-1.9.1.js"></script>
  8. <script src="//code.jquery.com/ui/1.10.4/jquery-ui.js"></script>
  9. <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
  10. <style>
  11. .custom-colorize {
  12. font-size: 20px;
  13. position: relative;
  14. width: 75px;
  15. height: 75px;
  16. }
  17. .custom-colorize-changer {
  18. font-size: 10px;
  19. position: absolute;
  20. right: 0;
  21. bottom: 0;
  22. }
  23. </style>
  24. <script>
  25. $(function() {
  26. // 部件定义,其中 "custom" 是命名空间,"colorize" 是部件名称
  27. $.widget( "custom.colorize", {
  28. // 默认选项
  29. options: {
  30. red: 255,
  31. green: 0,
  32. blue: 0,
  33. // 回调
  34. change: null,
  35. random: null
  36. },
  37. // 构造函数
  38. _create: function() {
  39. this.element
  40. // 添加一个主题化的 class
  41. .addClass( "custom-colorize" )
  42. // 防止双击来选择文本
  43. .disableSelection();
  44. this.changer = $( "<button>", {
  45. text: "改变",
  46. "class": "custom-colorize-changer"
  47. })
  48. .appendTo( this.element )
  49. .button();
  50. // 绑定 changer 按钮上的 click 事件到 random 方法
  51. this._on( this.changer, {
  52. // 当小部件被禁用时,_on 不会调用 random
  53. click: "random"
  54. });
  55. this._refresh();
  56. },
  57. // 当创建及之后改变选项时调用
  58. _refresh: function() {
  59. this.element.css( "background-color", "rgb(" +
  60. this.options.red +"," +
  61. this.options.green + "," +
  62. this.options.blue + ")"
  63. );
  64. // 触发一个回调/事件
  65. this._trigger( "change" );
  66. },
  67. // 一个改变颜色为随机值的公共方法
  68. // 可通过 .colorize( "random" ) 直接调用
  69. random: function( event ) {
  70. var colors = {
  71. red: Math.floor( Math.random() * 256 ),
  72. green: Math.floor( Math.random() * 256 ),
  73. blue: Math.floor( Math.random() * 256 )
  74. };
  75. // 触发一个事件,检查是否已取消
  76. if ( this._trigger( "random", event, colors ) !== false ) {
  77. this.option( colors );
  78. }
  79. },
  80. // 自动移除通过 _on 绑定的事件
  81. // 在这里重置其他的修改
  82. _destroy: function() {
  83. // 移除生成的元素
  84. this.changer.remove();
  85. this.element
  86. .removeClass( "custom-colorize" )
  87. .enableSelection()
  88. .css( "background-color", "transparent" );
  89. },
  90. // _setOptions 是通过一个带有所有改变的选项的哈希来调用的
  91. // 当改变选项时总是刷新
  92. _setOptions: function() {
  93. // _super 和 _superApply
  94. this._superApply( arguments );
  95. this._refresh();
  96. },
  97. // _setOption 是为每个独立的改变的选项调用的
  98. _setOption: function( key, value ) {
  99. // 防止无效的颜色值
  100. if ( /red|green|blue/.test(key) && (value < 0 || value > 255) ) {
  101. return;
  102. }
  103. this._super( key, value );
  104. }
  105. });
  106. // 通过默认选项进行初始化
  107. $( "#my-widget1" ).colorize();
  108. // 通过两个自定义的选项进行初始化
  109. $( "#my-widget2" ).colorize({
  110. red: 60,
  111. blue: 60
  112. });
  113. // 通过自定义的 green 值和一个只允许颜色足够绿的随机的回调进行初始化
  114. $( "#my-widget3" ).colorize( {
  115. green: 128,
  116. random: function( event, ui ) {
  117. return ui.green > 128;
  118. }
  119. });
  120. // 点击切换 enabled/disabled
  121. $( "#disable" ).click(function() {
  122. // 为每个小部件使用自定义的选择器来找到所有的实例
  123. // 所有的实例一起切换,所以我们可以从第一个开始检查状态
  124. if ( $( ":custom-colorize" ).colorize( "option", "disabled" ) ) {
  125. $( ":custom-colorize" ).colorize( "enable" );
  126. } else {
  127. $( ":custom-colorize" ).colorize( "disable" );
  128. }
  129. });
  130. // 在初始化后,点击设置选项
  131. $( "#black" ).click( function() {
  132. $( ":custom-colorize" ).colorize( "option", {
  133. red: 0,
  134. green: 0,
  135. blue: 0
  136. });
  137. });
  138. });
  139. </script>
  140. </head>
  141. <body>
  142. <div>
  143. <div id="my-widget1">改变颜色</div>
  144. <div id="my-widget2">改变颜色</div>
  145. <div id="my-widget3">改变颜色</div>
  146. <button id="disable">切换 disabled 选项</button>
  147. <button id="black">改为黑色</button>
  148. </div>
  149. </body>
  150. </html>

我要试一下

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号