common.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. /*
  2. * 弹出窗口
  3. */
  4. (function($) {
  5. $.fn.show_dialog = function(options) {
  6. var that = $(this);
  7. var settings = $.extend({}, {width: 480, title: ''}, options);
  8. var init_dialog = function(title) {
  9. var _div = that;
  10. that.addClass("dialog_wrapper");
  11. that.wrapInner(function(){
  12. return '<div class="dialog_content">';
  13. });
  14. that.wrapInner(function(){
  15. return '<div class="dialog_body" style="position: relative;">';
  16. });
  17. that.find('.dialog_body').prepend('<h3 class="dialog_head" style="cursor: move;"><span class="dialog_title"><span class="dialog_title_icon">'+settings.title+'</span></span><span class="dialog_close_button">X</span></h3>');
  18. that.append('<div style="clear:both;"></div>');
  19. $(".dialog_close_button").click(function(){
  20. _div.hide();
  21. });
  22. that.draggable();
  23. };
  24. if(!$(this).hasClass("dialog_wrapper")) {
  25. init_dialog(settings.title);
  26. }
  27. settings.left = $(window).scrollLeft() + ($(window).width() - settings.width) / 2;
  28. settings.top = $(window).scrollTop() + ($(window).height() - $(this).height()) / 2;
  29. $(this).attr("style","display:none; z-index: 1100; position: absolute; width: "+settings.width+"px; left: "+settings.left+"px; top: "+settings.top+"px;");
  30. $(this).show();
  31. };
  32. })(jQuery);
  33. /*
  34. * 文字计数
  35. */
  36. (function($) {
  37. $.fn.nc_text_count = function(options,submit_function) {
  38. var settings = $.extend({}, {max: 140}, options);
  39. return this.each(function() {
  40. $(this).after('<span nc_type="commend_count"></div>');
  41. var message_item = $(this).next("[nc_type='commend_count']");
  42. message_item.html($(this).val().length + '/' + settings.max);
  43. $(this).keyup({message_item:message_item}, commend_message_count);
  44. $(this).focusout({message_item:message_item}, commend_message_count);
  45. });
  46. function commend_message_count(event) {
  47. message_item = event.data.message_item;
  48. var message_count = $(this).val().length;
  49. if(message_count <= settings.max) {
  50. if((settings.max - message_count) > 10) {
  51. message_item.attr("class", "counter");
  52. message_item.html(message_count+"/"+settings.max);
  53. } else {
  54. message_item.attr("class", "counter warning");
  55. message_item.html(message_count+"/"+settings.max);
  56. }
  57. } else {
  58. var over_count = message_count - settings.max;
  59. message_item.attr("class", "counter exceeded");
  60. message_item.html("已超出"+parseInt(over_count, 10)+"个字");
  61. }
  62. }
  63. };
  64. })(jQuery);
  65. /*
  66. * 计数加减
  67. */
  68. (function($) {
  69. $.fn.nc_count = function(options) {
  70. var settings = $.extend({}, { type:'+',step:1}, options);
  71. var old_count = parseInt($(this).text(), 10);
  72. if(isNaN(old_count)) {
  73. old_count = 0;
  74. }
  75. if(old_count >= 999) {
  76. $(this).html('999+');
  77. } else {
  78. var new_count = old_count;
  79. if(settings.type == '-') {
  80. new_count = old_count - settings.step;
  81. } else {
  82. new_count = old_count + settings.step;
  83. }
  84. if(new_count < 0) {
  85. new_count = 0;
  86. }
  87. $(this).text(new_count);
  88. }
  89. return this;
  90. };
  91. })(jQuery);
  92. /*
  93. * 图片延迟加载
  94. */
  95. (function($) {
  96. $.fn.nc_lazyload_init = function() {
  97. this.each(function() {
  98. $(this).after($(this).val().replace(/src=/gi, 'data-src='));
  99. }).remove();
  100. };
  101. })(jQuery);
  102. /*
  103. * 图片延迟加载
  104. */
  105. (function($) {
  106. $.fn.nc_lazyload = function() {
  107. var lazy_items = [];
  108. this.each(function() {
  109. if($(this).attr("data-src") !== undefined){
  110. var lazy_item = {
  111. object: $(this),
  112. url: $(this).attr("data-src")
  113. };
  114. lazy_items.push(lazy_item);
  115. }
  116. });
  117. var load_img = function() {
  118. var window_height = $(window).height();
  119. var scroll_top = $(window).scrollTop();
  120. $.each(lazy_items, function(i, lazy_item) {
  121. if(lazy_item.object) {
  122. item_top = lazy_item.object.offset().top - scroll_top;
  123. if(item_top >= 0 && item_top < window_height) {
  124. if(lazy_item.url) {
  125. lazy_item.object.attr("src",lazy_item.url);
  126. }
  127. lazy_item.object = null;
  128. }
  129. }
  130. });
  131. };
  132. load_img();
  133. $(window).bind("scroll", load_img);
  134. };
  135. })(jQuery);
  136. /*
  137. * jQuery相册扩展
  138. */
  139. ;(function($) {
  140. $.fn.nc_gallery = function(options) {
  141. var defaults = {
  142. show_item_count: 1,
  143. btn_previous_page: '',
  144. btn_next_page: '',
  145. btn_previous_image: '',
  146. btn_next_image: '',
  147. animate: 100,
  148. start_item_count: 0,
  149. disable_css_class_name: 'disable',
  150. current_css_class_name: 'current',
  151. image_lazy_load: false,
  152. current_item_change_callback: function() {}
  153. };
  154. var settings = $.extend({}, defaults, options);
  155. function gallery($gallery) {
  156. var $items = $gallery.children();
  157. var items_length = $items.length;
  158. var current_item_count = 0;
  159. var max_item_count = items_length - 1;
  160. var min_item_count = 0;
  161. var item_change_step = 1;
  162. var current_page_start_count = 0;
  163. var max_page_start_count = items_length - settings.show_item_count;
  164. var min_page_start_count = 0;
  165. var $btn_previous_page = $(settings.btn_previous_page);
  166. var $btn_next_page = $(settings.btn_next_page);
  167. var $btn_previous_image = $(settings.btn_previous_image);
  168. var $btn_next_image = $(settings.btn_next_image);
  169. var page_enable = true;
  170. if(settings.show_item_count > items_length) {
  171. settings.show_item_count = items_length;
  172. page_enable = false;
  173. $btn_previous_page.addClass(settings.disable_css_class_name);
  174. $btn_next_page.addClass(settings.disable_css_class_name);
  175. image_lazy_load(0, items_length);
  176. if(items_length <= 1) {
  177. $btn_previous_image.addClass(settings.disable_css_class_name);
  178. $btn_next_image.addClass(settings.disable_css_class_name);
  179. }
  180. }
  181. $gallery.wrap('<div style="width: ' + settings.width * settings.show_item_count + 'px; overflow: hidden;"></div>');
  182. $gallery.attr("style", 'width:' + items_length * settings.width +'px;');
  183. $items.attr("style", 'float: left;');
  184. change_current_item(settings.start_item_count);
  185. $items.each(function(i, item) {
  186. $(item).click(function() {
  187. change_current_item(i);
  188. });
  189. });
  190. $btn_previous_page.click(function() {
  191. change_page_start(current_page_start_count - settings.show_item_count);
  192. });
  193. $btn_next_page.click(function() {
  194. change_page_start(current_page_start_count + settings.show_item_count);
  195. });
  196. $btn_previous_image.click(function() {
  197. change_current_item(current_item_count - item_change_step);
  198. });
  199. $btn_next_image.click(function() {
  200. change_current_item(current_item_count + item_change_step);
  201. });
  202. function change_page_start(page_start_count) {
  203. if(!page_enable) {
  204. return false;
  205. }
  206. $btn_previous_page.removeClass(settings.disable_css_class_name);
  207. $btn_next_page.removeClass(settings.disable_css_class_name);
  208. if(page_start_count <= min_page_start_count) {
  209. page_start_count = min_page_start_count;
  210. $btn_previous_page.addClass(settings.disable_css_class_name);
  211. }
  212. if(page_start_count >= max_page_start_count) {
  213. page_start_count = max_page_start_count;
  214. $btn_next_page.addClass(settings.disable_css_class_name);
  215. }
  216. if(settings.image_lazy_load) {
  217. image_lazy_load(page_start_count, settings.show_item_count);
  218. }
  219. current_page_start_count = page_start_count;
  220. var margin_left = - page_start_count * settings.width;
  221. $gallery.animate({
  222. marginLeft: margin_left
  223. }, settings.animate);
  224. }
  225. function change_current_item(next_item_count) {
  226. $btn_previous_image.removeClass(settings.disable_css_class_name);
  227. $btn_next_image.removeClass(settings.disable_css_class_name);
  228. if(next_item_count <= min_item_count) {
  229. next_item_count = min_item_count;
  230. $btn_previous_image.addClass(settings.disable_css_class_name);
  231. }
  232. if(next_item_count >= max_item_count) {
  233. next_item_count = max_item_count;
  234. $btn_next_image.addClass(settings.disable_css_class_name);
  235. }
  236. var $current_item = $($items.get(next_item_count));
  237. $items.removeClass(settings.current_css_class_name);
  238. $current_item.addClass(settings.current_css_class_name);
  239. change_page_start(next_item_count - Math.floor(settings.show_item_count / 2));
  240. current_item_count = next_item_count;
  241. settings.current_item_change_callback(current_item_count, $current_item);
  242. }
  243. function image_lazy_load(start, count) {
  244. for(var i = 0; i < count; i++) {
  245. var $current_img = $($items.get(start + i)).find('img');
  246. $current_img.attr('src', $current_img.attr('data-src'));
  247. }
  248. }
  249. }
  250. return this.each(function() {
  251. gallery($(this));
  252. });
  253. };
  254. })(jQuery);