common.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. /**
  2. * 首页初始化
  3. */
  4. define(function(require, exports, module){
  5. var $ = require('lib/zepto'),
  6. //tip = require('ui/widget/tip'),
  7. //giftflow = require('ui/widget/giftflow'),
  8. slideview = require('ui/slideview'),
  9. scrollview = require('ui/scrollview'),
  10. ai = require('lib/ai'),
  11. //ajax = require('util/ajax'),
  12. //user = require('module/user'),
  13. //userinfo = user.getInfo(),
  14. ScrollSlide = require('/index3/js/ui/scrollslide');
  15. var slipjs;
  16. var scroll, tools = {};
  17. tools.hasTouch = 'ontouchstart' in window;
  18. tools.touchStart = tools.hasTouch ? 'touchstart' : 'mousedown';
  19. tools.touchMove = tools.hasTouch ? 'touchmove' : 'mousemove';
  20. var isInitedInfo = false;
  21. var config = {
  22. showBackTopOffset : 100,
  23. jumpDelay : 500
  24. };
  25. /*
  26. function onBodyTouchStart(evt){
  27. if(scroll.isShow){
  28. scroll.toggle();
  29. if(evt.target != $('#ptlogin-cancel')[0]){
  30. evt.preventDefault();
  31. }else{
  32. $('#ptlogin-cancel').trigger('click');
  33. }
  34. }
  35. $('body')[0].removeEventListener(tools.touchStart, onBodyTouchStart);
  36. }
  37. //阻止body滑动
  38. function stopBodySlide(){
  39. var $body = $('body');
  40. $body[0].addEventListener(tools.touchStart, onBodyTouchStart);
  41. }
  42. function wapgetQueryString(name) {
  43. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  44. var r = window.location.search.substr(1).match(reg);
  45. if (r != null) return unescape(r[2]); return null;
  46. }
  47. //侧边栏滑动
  48. function slideSideBar(){
  49. if($('#sidebar').length > 0){
  50. var $dom = $('#sidebar'), that = this, $slideDom = $('#slide_side_box')
  51. ,parentHeight = $dom.height(), height = $slideDom.height();
  52. $dom[0].addEventListener(tools.touchStart, function(evt){
  53. evt.stopPropagation();
  54. }, false);
  55. $dom[0].addEventListener(tools.touchMove, function(evt){
  56. evt.stopPropagation();
  57. }, false);
  58. $dom.on('click', function(evt){
  59. return false;
  60. });
  61. //点击流,防止被上一层阻止事件冒泡
  62. $slideDom.delegate('[data-pvtag]', 'click', function(){
  63. var tag = $(this).attr('data-pvtag');
  64. tag && stat.click(tag);
  65. return false;
  66. });
  67. }
  68. }
  69. function initSlip(){
  70. if(slipjs){
  71. return;
  72. }
  73. var $slideDom = $('#slide_side_box');
  74. $('#siderbar_wrap').css('height', ai.wh());
  75. $slideDom.css('height', $slideDom[0].scrollHeight)
  76. slipjs = slip('px', $slideDom[0], {
  77. no_bar: true,
  78. direction : 'y',
  79. height: ai.wh()
  80. });
  81. }*/
  82. module.exports = function(){
  83. /*
  84. * Banner图片
  85. */
  86. if($('#slider').length){
  87. new slideview({
  88. dom : $('#slider')
  89. });
  90. }
  91. /**
  92. * 礼包列表
  93. */
  94. if($('#giftlist-wrap').length){
  95. new scrollview({
  96. wrapSel : '#giftlist-wrap',
  97. listSel : '#giftlist',
  98. itemSel : 'li'
  99. });
  100. }
  101. $('.j_app_inc').each(function(i, ul){
  102. var $ul = $(ul);
  103. var $siblings = $ul.siblings('ul.mod-app-list');
  104. var map = {};
  105. var hideNum = 0;
  106. var num;
  107. $ul.find('li').each(function(i, li){
  108. var $li = $(li);
  109. var url = $li.attr('data-url');
  110. map[url] = 1;
  111. });
  112. $siblings.each(function(i, sibling){
  113. var $sibling = $(sibling);
  114. var isConfict = false;
  115. $sibling.find('li').each(function(i, li){
  116. if(isConfict){
  117. return;
  118. }
  119. var url = $(li).attr('data-url');
  120. if(map[url]){
  121. isConfict = true;
  122. hideNum++;
  123. $sibling.hide();
  124. }
  125. });
  126. });
  127. if(hideNum < 2){
  128. hideByNum($siblings, 2 - hideNum);
  129. }
  130. $ul.show();
  131. });
  132. if(ai.ovb.android()){
  133. var aurl = $('.ku_wapurl').attr('data-anurl');
  134. if(aurl)
  135. $('.ku_wapurl').attr('data-url',aurl);
  136. $('.ku_url').attr('data-url','http://m.18183.com/android.html');
  137. }else if(ai.ovb.iphone()){
  138. var aurl = $('.ku_wapurl').attr('data-iurl');
  139. if(aurl)
  140. $('.ku_wapurl').attr('data-url',aurl);
  141. $('.ku_url').attr('data-url','http://m.18183.com/iphone.html');
  142. }else if(ai.ovb.ipad()){
  143. var aurl = $('.ku_wapurl').attr('data-ipurl');
  144. if(aurl)
  145. $('.ku_wapurl').attr('data-url',aurl);
  146. $('.ku_url').attr('data-url','http://m.18183.com/ipad.html');
  147. }
  148. /*滑动
  149. var width = 210;
  150. scroll = new ScrollSlide({
  151. slideContent : '#sidebar',
  152. slideBody : ['.header', '.content','.mod_download_sup', '.footer'],
  153. width : width,
  154. direction : 'right',
  155. //afterShow和afterHide中移除data-url操作主要为了解决touchStart事件穿透问题
  156. afterShow : function(){
  157. setTimeout(function(){
  158. $('#j-slide-art').attr('data-url', '/art.shtml');
  159. }, 100);
  160. $('#j_head_nav li a').each(function(i, li){
  161. var $li = $(li);
  162. $li.attr('data-url-ori', $li.attr('data-url'));
  163. $li.removeAttr('data-url');
  164. $li.removeAttr('href');
  165. });
  166. },
  167. afterHide : function(){
  168. $('#j-slide-art').removeAttr('data-url');
  169. setTimeout(function(){
  170. $('#j_head_nav li a').each(function(i, li){
  171. var $li = $(li);
  172. $li.attr('data-url', $li.attr('data-url-ori'));
  173. $li.removeAttr('data-url-ori');
  174. });
  175. }, 500);
  176. }
  177. });
  178. slideSideBar();
  179. if($('#nav_forum').length > 0){
  180. $('#nav_forum')[0].addEventListener(tools.touchStart, function(evt){
  181. $('#sidebar').show();
  182. scroll.toggle();
  183. setTimeout(initSlip, 100);
  184. stopBodySlide();
  185. evt.stopPropagation();
  186. evt.preventDefault();
  187. for(var p in evt){
  188. evt[p] = undefined;
  189. }
  190. return false;
  191. });
  192. }*/
  193. if($('#nav_forum').length > 0){
  194. $('#nav_forum').click(function(){
  195. if(document.getElementById('j_head_nav').style.display=="none"){
  196. $('#j_head_nav').show();
  197. }else{
  198. $('#j_head_nav').hide();
  199. }
  200. });
  201. }
  202. initGlobal();
  203. initBackTop();
  204. if($('#j_imglist').length>0)
  205. initScrollview();
  206. function hideByNum($siblings, num){
  207. var len = $siblings.size();
  208. var $sibling;
  209. for(var i = len; i > 0; i--){
  210. if(num <=0 ){
  211. break;
  212. }
  213. $sibling = $siblings.eq(i);
  214. if($sibling.height()){
  215. $sibling.hide();
  216. num--;
  217. }
  218. }
  219. }
  220. };
  221. function cookie(key, value, options) {
  222. var days, time, result, decode
  223. if (arguments.length > 1 && String(value) !== "[object Object]") {
  224. options = options || {};
  225. if (value === null || value === undefined) options.expires = -1
  226. if (typeof options.expires === 'number') {
  227. days = (options.expires * 24 * 60 * 60 * 1000)
  228. time = options.expires = new Date()
  229. time.setTime(time.getTime() + days)
  230. }
  231. value = String(value)
  232. return (document.cookie = [
  233. encodeURIComponent(key), '=',
  234. options.raw ? value : encodeURIComponent(value),
  235. options.expires ? '; expires=' + options.expires.toUTCString() : '',
  236. options.path ? '; path=' + options.path : '',
  237. options.domain ? '; domain=' + options.domain : '',
  238. options.secure ? '; secure' : ''
  239. ].join(''))
  240. }
  241. options = value || {}
  242. decode = options.raw ? function (s) { return s } : decodeURIComponent
  243. return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null
  244. }
  245. function initBackTop(){
  246. var btn = $('#j_back_top');
  247. var wrap = btn.parent();
  248. var win = $(window);
  249. var doc = $(document);
  250. wrap.click(function(){
  251. window.scrollTo(0, 0);
  252. });
  253. function updateBackTopButton(){
  254. if(doc.height() > win.height()){
  255. wrap.show();
  256. }
  257. else{
  258. wrap.hide();
  259. }
  260. if(doc.height()-win.scrollTop()>1100){
  261. $(".mod_download_sup").show();
  262. }else{
  263. $(".mod_download_sup").hide();
  264. }
  265. setTimeout(updateBackTopButton, 1000);
  266. }
  267. if(cookie('srctype')=='android'){
  268. $(".mod_download_sup").hide();
  269. }else{
  270. $(".header").show();
  271. $(".j_hide_empty").show();
  272. $(".footer").show();
  273. updateBackTopButton();
  274. }
  275. }
  276. function initGlobal(){
  277. var doc = $(document)
  278. /*
  279. * 跳转标签
  280. * setTimeout 500 毫秒是为了发出统计请求
  281. */
  282. function handleClick(){
  283. $('[data-url]').each(function(i, el){
  284. if(el.clickbined){
  285. return;
  286. }
  287. el.clickbined = true;
  288. var $el = $(el);
  289. var url = $el.attr('data-url');
  290. var tag = $el.attr('data-pvtag');
  291. var isLink = $el.is('a');
  292. var type = $el.attr('data-type');
  293. if(url!="Pro_download" && isLink){
  294. $el.attr('href', url)
  295. }
  296. if(url=="Pro_download" && isLink){
  297. url = $el.attr('href');
  298. }
  299. $el.on('click', function(evt){
  300. if(type=="download"){
  301. alert("down");
  302. }
  303. if(type=="download" && ai.ovb.weixn()){
  304. var Pro=document.getElementById("pro");
  305. var ProBg=Pro.children[0];
  306. var ProContent=Pro.children[1];
  307. if(ai.ovb.ios()){//iPhone
  308. ProContent.innerHTML="额~~你好像是用微信打开的!请点击右上角的按钮,选择“<span class='orange'>在Safari中打开</span>”,才能正常下载噢!";
  309. }else if(ai.ovb.android()){//android
  310. ProContent.innerHTML="<img style='float:right;' src='http://m.18183.com/images/pro.png'/>额~~你好像是用微信打开的!请点击右上角的按钮,选择“<span class='orange'>在浏览器中打开</span>”,才能正常下载噢!";
  311. }
  312. Pro.style.display='block';
  313. return false;
  314. }
  315. //延迟一段时间,发两个统计请求
  316. var delay = config.jumpDelay;
  317. setTimeout(function(){
  318. window.location.href = url;
  319. }, delay);
  320. /*
  321. * 只响应最近的一个跳转地址
  322. */
  323. if(url){
  324. evt.stopPropagation();
  325. }
  326. if(isLink){
  327. return false;
  328. }
  329. });
  330. })
  331. setTimeout(handleClick, 500);
  332. }
  333. handleClick();
  334. /*
  335. * 阻止默认事件标签
  336. */
  337. doc.delegate('[data-nogo]', 'click', function(evt){
  338. evt.preventDefault();
  339. evt.stopPropagation();
  340. });
  341. }
  342. function initScrollview(){
  343. var $imglist = $('#j_imglist');
  344. var $img = $imglist.find('img')
  345. var size = $img.size();
  346. var queue = {};
  347. var counter = 0;
  348. var listWidth = 0;
  349. function complete(){
  350. /**
  351. * 图片列表
  352. */
  353. new scrollview({
  354. wrapSel : '#j_imglist_wrap',
  355. listSel : '#j_imglist',
  356. listWidth : listWidth + 30
  357. });
  358. }
  359. function check(){
  360. $img.each(function(i, img){
  361. if(!queue[img.src] && img.clientWidth){
  362. queue[img.src] = 1;
  363. counter++;
  364. listWidth += img.clientWidth;
  365. }
  366. });
  367. if(counter < size){
  368. setTimeout(check, 100);
  369. }
  370. else{
  371. complete();
  372. }
  373. }
  374. check();
  375. }
  376. });
  377. define("ui/scrollview",function(require, exports, module){
  378. var $ = require('lib/zepto'),
  379. ai = require('lib/ai'),
  380. slip = require('lib/slip'),
  381. undefined;
  382. function ScrollView(_options){
  383. var options = $.extend({
  384. wrapSel : '#giftlist-wrap',
  385. listSel : '#giftlist',
  386. itemSel : 'li',
  387. listWidth : 0
  388. }, _options);
  389. var itemWidth, marginLeft, marginRight, listWidth,
  390. wrap = $(options.wrapSel),
  391. list = wrap.find(options.listSel),
  392. items = wrap.find(options.itemSel),
  393. firstItem = items.eq(0),
  394. itemNum = items.size();
  395. if(options.listWidth){
  396. listWidth = options.listWidth;
  397. }
  398. else{
  399. itemWidth = firstItem.width()
  400. marginLeft = parseInt(firstItem.css('margin-left'), 10);
  401. marginRight = parseInt(firstItem.css('margin-right'), 10);
  402. itemWidth = itemWidth + marginLeft + marginRight;
  403. listWidth = itemWidth * itemNum;
  404. }
  405. list.width(listWidth);
  406. function updateScrollBar(){
  407. var scrollbar = wrap.find('div').eq(1);
  408. if(ai.ww() > (listWidth)){
  409. scrollbar.hide();
  410. }
  411. else{
  412. scrollbar.show();
  413. }
  414. }
  415. var slipjs_dh = slip('px', list[0],{
  416. direction: "x",
  417. width: ai.ww() - 20,
  418. bar_no_hide : true
  419. });
  420. ai.resize(function() {
  421. slipjs_dh.refresh();
  422. updateScrollBar();
  423. }, false);
  424. updateScrollBar();
  425. return;
  426. }
  427. return ScrollView;
  428. });