main.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. var event = function (obj, eventType, callback) {
  2. obj.live(eventType, callback);
  3. };
  4. var Verification = function () {
  5. this.isEmpty = function (objVal, msg) {
  6. if (!objVal) {
  7. this.alert("empty", msg);
  8. return false;
  9. }
  10. return objVal;
  11. };
  12. this.alert = function (type, msg) {
  13. switch (type) {
  14. case "empty" : {
  15. alert(msg);
  16. break;
  17. }
  18. default : {
  19. alert("亲!请填写!");
  20. }
  21. }
  22. }
  23. };
  24. var ajax = function (url, callback) {
  25. $.ajax({
  26. type: "get",
  27. async: false,
  28. url: url,
  29. dataType: "jsonp",
  30. jsonp: "callback",
  31. jsonpCallback: "flightHandler",
  32. success: callback,
  33. error: function () {
  34. }
  35. });
  36. };
  37. var Vote = function (type) {
  38. var _self = this;
  39. this.type = type;
  40. this.answer = [];
  41. this.obj = $('input[name="submit_vote"]');
  42. this.M = function () {
  43. var options = function () {
  44. var options = [];
  45. for (var i = 0; i < $('.vote_options label').length; i++) {
  46. var option = $.trim($('.vote_options label').eq(i).text());
  47. options.push(option);
  48. }
  49. return options;
  50. };
  51. var sum_num = function (datas) {
  52. var sum = 0;
  53. for (var i = 0; i < datas['vote_result'].length; i++) {
  54. sum += parseFloat(datas['vote_result'][i]);
  55. }
  56. return sum;
  57. };
  58. var result = function (data) {
  59. var option_items = options();
  60. var sum = sum_num(data);
  61. var vote_res = [];
  62. for (var i = 0; i < data['vote_result'].length; i++) {
  63. var g = {};
  64. g.name = option_items[i];
  65. g.num = parseInt(data['vote_result'][i]);
  66. g.percentage = data['vote_result'][i] ? Math.round(data['vote_result'][i] / sum * 100) : 0;
  67. vote_res.push(g);
  68. }
  69. return vote_res;
  70. };
  71. return {
  72. voteRes: function (datas, callback) {
  73. console.log(datas);
  74. var special_id = $('.vote').attr('data-special_id');
  75. // var url = document.location.protocol+"//"+document.location.host+'/mobile/index.php?act=special&op=vote&client_type=ajax&special_id='+special_id+'&options='+datas;
  76. var url = 'http://192.168.0.200/mobile/index.php?act=special&op=vote&client_type=ajax&special_id=' + special_id + '&options=' + datas;
  77. ajax(url, function (data) {
  78. if (data.code !== 200) {
  79. alert(data.message);
  80. return;
  81. }
  82. var res = result(data.datas);
  83. callback(res);
  84. });
  85. }
  86. }
  87. };
  88. this.V = function (datas) {
  89. var resData = datas;
  90. var html = '<div class="results">';
  91. for (var i = 0; i < resData.length; i++) {
  92. html += '<div class="result">' +
  93. '<div class="result_option">' + resData[i].name + '</div>' +
  94. '<div class="status">' +
  95. '<div class="status_line">' +
  96. '<div class="stat"></div>' +
  97. '<div class="status_bg"></div>' +
  98. '</div>' +
  99. '<span class="num">' + resData[i].num + '票</span>' +
  100. '<span class="percentage">' + resData[i].percentage + '%</span>' +
  101. '</div>' +
  102. '</div>';
  103. }
  104. html += '</div>';
  105. return html;
  106. };
  107. this.C = function () {
  108. var statShow = function () {
  109. if ($('.percentage').length > 0) {
  110. setTimeout(function () {
  111. for (var i = 0; i < $('.percentage').length; i++) {
  112. var num = $('.percentage')[i].innerHTML;
  113. $('.stat')[i].style.width = num;
  114. }
  115. }, 300);
  116. clearInterval(a);
  117. }
  118. };
  119. var a = setInterval(statShow, 10);
  120. event(_self.obj, 'change', function () {
  121. switch (_self.type) {
  122. case 0:
  123. case 1 : {
  124. _self.answer = [];
  125. $.each(_self.obj, function () {
  126. if (this.checked) {
  127. _self.answer.push($(this).val());
  128. }
  129. });
  130. break;
  131. }
  132. case 2: {
  133. var val = $(this).val();
  134. if ($(this).prop('checked')) {
  135. if (_self.answer.length >= 2) {
  136. for (var g = 0; g < _self.obj.length; g++) {
  137. if (_self.obj.eq(g).val() == _self.answer[0]) {
  138. _self.obj.eq(g).prop('checked', false);
  139. _self.answer.splice(0, 1);
  140. _self.answer.push(val);
  141. break;
  142. }
  143. }
  144. }
  145. else {
  146. _self.answer = [];
  147. $.each(_self.obj, function () {
  148. if (this.checked) {
  149. _self.answer.push($(this).val());
  150. }
  151. });
  152. }
  153. }
  154. else {
  155. _self.answer = [];
  156. $.each(_self.obj, function () {
  157. if (this.checked) {
  158. _self.answer.push($(this).val());
  159. }
  160. });
  161. }
  162. }
  163. }
  164. });
  165. event($('#submit_btn'), 'click', function () {
  166. if ($(this).hasClass('button_null')) {
  167. return;
  168. }
  169. if (_self.answer.length == '') {
  170. alert('亲,请投票!');
  171. return false;
  172. }
  173. _self.M().voteRes(_self.answer, function (res) {
  174. $('.vote_pro').after(_self.V(res));
  175. });
  176. $('.vote_options').css('display', 'none');
  177. $(this).addClass('button_null').html('已完成投票');
  178. statShow();
  179. })
  180. };
  181. };
  182. var Question = function (obj, handleType) {
  183. this.obj = obj;
  184. this.handleType = handleType;
  185. this.answer = [];
  186. this.getAnswer = function () {
  187. return this.answer;
  188. };
  189. this.C = function () {
  190. var _self = this;
  191. _self.obj.on('change', function () {
  192. switch (_self.handleType) {
  193. case 0:
  194. case 1 : {
  195. _self.answer = [];
  196. $.each(_self.obj, function () {
  197. if (this.checked) {
  198. _self.answer.push($(this).val());
  199. }
  200. });
  201. break;
  202. }
  203. case 2: {
  204. var val = $(this).val();
  205. if ($(this).prop('checked')) {
  206. if (_self.answer.length >= 2) {
  207. for (var g = 0; g < _self.obj.length; g++) {
  208. if (obj.eq(g).val() == _self.answer[0]) {
  209. obj.eq(g).prop('checked', false);
  210. _self.answer.splice(0, 1);
  211. _self.answer.push(val);
  212. break;
  213. }
  214. }
  215. }
  216. else {
  217. _self.answer = [];
  218. $.each(_self.obj, function () {
  219. if (this.checked) {
  220. _self.answer.push($(this).val());
  221. }
  222. });
  223. }
  224. }
  225. else {
  226. _self.answer = [];
  227. $.each(_self.obj, function () {
  228. if (this.checked) {
  229. _self.answer.push($(this).val());
  230. }
  231. });
  232. }
  233. break;
  234. }
  235. }
  236. });
  237. }
  238. };
  239. var QuestionList = function () {
  240. var question_items = [];
  241. (function (question_items) {
  242. var questions = $('.question').length;
  243. var num = 1;
  244. var question_nums = 'q' + num;
  245. for (var j = 0; j < questions; j++) {
  246. question_nums = new Question($('input[name="question' + num + '"]'), parseInt($('.question_type').eq(j).attr('data-type')));
  247. question_items.push(question_nums);
  248. question_nums.C();
  249. num++;
  250. }
  251. })(question_items);
  252. var answers = function () {
  253. var answers = {};
  254. answers.type = 'question';
  255. answers['answers'] = [];
  256. for (var i = 0; i < question_items.length; i++) {
  257. answers['answers'].push(question_items[i].getAnswer());
  258. }
  259. return answers;
  260. };
  261. this.submit = function () {
  262. $('#submit_question').on('click', function () {
  263. var resAnswers = answers();
  264. console.log(resAnswers);
  265. for(var i = 0;i < resAnswers['answers'].length;i++) {
  266. if(resAnswers['answers'][i].length == 0) {
  267. var noQuestion = $('input[name="question'+(i+1)+'"]').offset().top;
  268. window.scrollTo(0,noQuestion-120);
  269. alert('请回答第'+(i+1)+'题');
  270. return;
  271. }
  272. }
  273. })
  274. };
  275. };
  276. var CommentsBox = function () {
  277. this.V = function () {
  278. var html = '<div class="pop">' +
  279. '<a href="javascript:void(0)" class="bonus_page"></a>' +
  280. '<a href="javascript:void(0)" class="close_icon"></a>' +
  281. '<div class="answer_comments">' +
  282. '<div class="handle">' +
  283. '<div><a href="javascript:void(0)" class="close">取消</a></div>' +
  284. '<div><a href="javascript:void(0)" class="submit">发送</a></div>' +
  285. '</div>' +
  286. '<div class="comments_box">' +
  287. '<textarea name="" id="comments" cols="30" rows="10" class="comments"></textarea>' +
  288. '</div>' +
  289. '<div class="msg_num">' +
  290. '<p>剩余<span class="surplus">250</span>字</p>' +
  291. '</div>' +
  292. '</div>' +
  293. '</div>';
  294. return html;
  295. };
  296. this.M = function () {
  297. };
  298. this.C = function () {
  299. var _self = this;
  300. var maxSize = 250;
  301. return {
  302. appendHtml: function () {
  303. $('body').append(_self.V());
  304. },
  305. show: function () {
  306. event($('.msg_btn'), 'touchend', function () {
  307. $(this).removeClass('active');
  308. $('.msg_icon_null').removeClass('msg_icon');
  309. $('.pop').show();
  310. $('.answer_comments').show();
  311. $('#comments').focus();
  312. $("body").on("touchmove", function (event) {
  313. event.preventDefault;
  314. }, false)
  315. });
  316. },
  317. close: function () {
  318. event($('.close'), 'click', function () {
  319. $('#comments').val('');
  320. $('.surplus').html(maxSize);
  321. $('.pop').hide();
  322. $('.answer_comments').hide();
  323. $("body").off("touchmove");
  324. })
  325. },
  326. surplusInput: function () {
  327. event($('#comments'), 'input', function () {
  328. var val = $(this).val().length;
  329. var surplus = 0;
  330. if (val <= maxSize) {
  331. surplus = maxSize - val;
  332. }
  333. else {
  334. $(this).val($(this).val().substring(0, maxSize));
  335. }
  336. $('.surplus').html(surplus);
  337. })
  338. },
  339. submit: function () {
  340. event($('.submit'), "click", function () {
  341. var verification = new Verification();
  342. verification.isEmpty($('#comments').val(), '亲,内容不能为空哦');
  343. $('.pop').css('display', 'none');
  344. $('#comments').val('');
  345. $("body").off("touchmove");
  346. })
  347. }
  348. }
  349. }
  350. };
  351. var PageVideo = function(){
  352. var createDom = function(videosrc){
  353. var a = document.createElement('video');
  354. a.poster = './images/image01.png';
  355. a.src = videosrc;
  356. return a;
  357. };
  358. this.append = function(){
  359. for(var i = 0;i<$('.video_box').length;i++) {
  360. var videosrc = $('.video_box').eq(i).attr('data-src');
  361. $('.video_box').eq(i).append(createDom(videosrc));
  362. }
  363. };
  364. };
  365. var Pagevideo = new PageVideo();
  366. Pagevideo.append();
  367. var vote = new Vote(parseInt($('.vote_type').attr('data-type')));
  368. vote.C();
  369. var questionList = new QuestionList();
  370. questionList.submit();
  371. var commentsBox = new CommentsBox();
  372. for (var i in commentsBox.C()) {
  373. commentsBox.C()[i]();
  374. }
  375. event($('.like_btn'), 'click', function () {
  376. $(this).toggleClass('active');
  377. $(this).find('.like_icon_null').toggleClass('like_icon');
  378. });
  379. event($('.close_icon'), 'click', function () {
  380. $('.pop').hide();
  381. $('.bonus_page').hide();
  382. $('.close_icon').hide();
  383. });
  384. event($('.comment_label'), 'click', function () {
  385. $('.pop').show();
  386. $('.bonus_page').addClass('fade-in').show();
  387. $('.close_icon').addClass('rotate').show();
  388. });