123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989 |
- /**
- * Created by zhaoxueliang on 2020/5/22.
- */
- $(function () {
- // 页面编码
- var PAGE_CODE = {
- // 最近阅读
- 'RECENT_READ': 'recent_read',
- // 书架
- 'BOOK_SHELF': 'book_shelf',
- // 书籍详情页
- 'BOOK_DETAIL': 'book_detail',
- // 追更页
- 'TYPING': 'typing',
- // 阅读页
- 'BOOK_READING': 'book_reading',
- // 充值页
- 'CHARGE': 'charge',
- // 个人中心
- 'MY': 'my',
- // 排行榜
- 'RANKING_LIST': 'ranking_list',
- // 分类首页
- 'CATEGORY_MAIN': 'category_main',
- // 分类二级页
- 'CATEGORY_SUB': 'category_sub',
- // 书城首页
- 'BOOK_STORE': 'book_store',
- };
- // 广告位置编号
- var AD_POSITION_CODE = {
- // 书籍详情页广告位
- 'BOOK_DETAIL': 1,
- // 书籍详情页浮窗广告位
- 'BOOK_DETAIL_FLOW': 22,
- // 追更、完结页广告位
- 'TYPING': 2,
- // 最近阅读广告位
- 'RECENT_READ': 4,
- // 书架/阅读记录广告位
- 'BOOK_SHELF': 5,
- // 阅读页底部广告位
- 'BOOK_READING_BOTTOM': 3,
- // 阅读页顶部菜单悬浮广告位
- 'BOOK_READING_MENU': 6,
- // 阅读页中间插屏广告位1
- 'BOOK_READING_MIDDLE_PRIMARY': 7,
- // 阅读页中间插屏广告位2
- 'BOOK_READING_MIDDLE_LARGE': 8,
- // 阅读页中间插屏广告位3
- 'BOOK_READING_MIDDLE_THIRD': 9,
- // 充值页返回弹窗广告位
- 'CHARGE_LEAVE': 10,
- // 阅读页下一章弹窗广告位
- 'BOOK_READING_NEXT_CHAPTER': 11,
- // 阅读页顶部轮播广告位
- 'BOOK_READING_TOP_BANNER': 18,
- // 阅读页跳转广告章节广告位
- 'BOOK_READING_DELIVER': 19,
- // 签到弹窗广告位
- 'MY_CHECKIN_ALERT': 12,
- // 个人中心插屏广告位
- 'MY_CONTENT': 13,
- // 排行榜插屏广告位
- 'RANKING_LIST': 14,
- // 分类首页插屏广告位
- 'CATEGORY_MAIN': 15,
- // 分类二级页插屏广告位
- 'CATEGORY_SUB': 16,
- // 书城首页顶部轮播广告位
- 'BOOK_STORE_TOP_BANNER': 17,
- // 书城首页中间内容插屏广告位
- 'BOOK_STORE_MIDDLE_BANNER': 20,
- // 书城首页悬浮窗广告位
- 'BOOK_STORE_FLOW': 21,
- };
- var PAGE_POSITION_MAP = {
- 'recent_read': [4],
- 'book_shelf': [5],
- 'book_detail': [1, 22],
- 'typing': [2],
- 'book_reading': [3, 6, 7, 8, 9, 11, 18, 19],
- 'charge':[10],
- 'my':[12, 13],
- 'ranking_list':[14],
- 'category_main':[15],
- 'category_sub':[16],
- 'book_store':[17, 20, 21]
- };
- var REQUEST_INTERVAL = 60 * 60 * 1000;
- var STORE_TIME = 'storeTime';
- var LOCAL_AD_DATA = 'local_AD_data';
- var LATEST_VERSION = 'latestVersion';
- var READING_BANNER_CLOSE_TIME = 'reading_banner_close_time';
- var API_URL = {
- GET_AD_STRATEGY: '/api/aduserapi/advert'
- };
- var simpleAD = {
- userId: _getUserId(),
- channelId: _getChannelId()
- };
- // 当前章节是否需要跳转到广告章节页
- var shouldGoToADChapter = false;
- var read_chapter = 0;
- //拿到广告数据后插入广告
- simpleAD.render = function (pageCode) {
- var localADData = JSON.parse(localStorage.getItem(LOCAL_AD_DATA));
- var latestVersion = localStorage.getItem(LATEST_VERSION) || '';
- var lastStoreTime = localADData && localADData[STORE_TIME];
- var now = new Date().getTime();
- if (localADData && (now - lastStoreTime < REQUEST_INTERVAL) && latestVersion == window.$adLatestVersion) {
- _renderPageAD(localADData, pageCode);
- } else {
- $.ajax({
- type: 'POST',
- url: API_URL.GET_AD_STRATEGY,
- data: {
- pagecode: pageCode,
- uid: this.userId,
- channel_id: this.channelId
- },
- success: function (res) {
- if (res.code == 1 && (res.data instanceof Object)) {
- var storeData = {};
- storeData[STORE_TIME] = new Date().getTime();
- $.extend(storeData, res.data);
- localStorage.removeItem(LATEST_VERSION);
- localStorage.setItem(LATEST_VERSION,window.$adLatestVersion);
- localStorage.removeItem(LOCAL_AD_DATA);
- localStorage.setItem(LOCAL_AD_DATA, JSON.stringify(storeData));
- _renderPageAD(storeData, pageCode);
- }else{
- localStorage.removeItem(LOCAL_AD_DATA);
- }
- },
- error: function (error) {
- }
- });
- }
- };
- //下章节弹窗广告显示
- simpleAD.showReadAlert = function(){
- if(window.$isAdPick != '1'){
- return false;
- }
- var readedChapter = localStorage.getItem('readedChapterNum');
- if(!readedChapter){
- return false;
- }
- var readedChapterNum = JSON.parse(readedChapter).num;
- if(readedChapterNum >= read_chapter){
- // 用户当天阅读章节数达到后台下发的章节数后,清空当前缓存的章节数,重新开始计数,以实现每隔若干章弹一次“温馨提示”的需求
- localStorage.removeItem('readedChapterNum');
- }
- if(read_chapter == readedChapterNum){
- var ADElement = $('.ad-read-alert').find('.ad-image');
- if(ADElement.length == 0){
- return false;
- }
- var target = ADElement[0];
- var mId = target.dataset.mId;
- var adIds = target.dataset.adIds;
- var position = target.dataset.position;
- //发送报点
- _sendLog(adIds,position,mId);
- $('.ad_chapter_num').text(readedChapterNum);
- $('.ad-read-alert').show();
- return true;
- }
- return false;
- };
- //充值页广告弹窗
- simpleAD.showRechargeAlert = function(){
- var ADElement = $('.ad-recharge-alert').find('.ad-image');
- if(ADElement.length == 0){
- return false;
- }
- var target = ADElement[0];
- var mId = target.dataset.mId;
- var adIds = target.dataset.adIds;
- var position = target.dataset.position;
- _sendLog(adIds,position,mId);
- $('.ad-recharge-alert').show();
- return true;
- };
- simpleAD.getADChapterUrl = function(url){
- var search = url.split('?')[1];
- if(!shouldGoToADChapter|| !search){
- return '';
- }
- var book_id = _getQueryString(search,'book_id');
- var chapter_id = _getQueryString(search,'chapter_id');
- //不能拼死漏掉末尾参数???????????????
- return 'ad_chapter?'+search+"&chapter_name="+window.ad_chapter_name;
- };
- function _getQueryString(url,name) {
- var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
- var r = url.match(reg);
- if (r != null)
- return decodeURI(r[2]);
- return '';
- }
- // 从cookie中获取userId
- function _getUserId() {
- return $.fn.cookie('user_id') || '';
- }
- // 从cookie中获取channelId
- function _getChannelId() {
- return $.fn.cookie('channel_id') || '';
- }
- // 渲染当前页面广告
- function _renderPageAD(localADData, pageCode) {
- //服务端缓存在本地数据,广告点位、渠道
- var positions = localADData.positions;
- var materials = localADData.materials;
- if(!positions || !materials){
- return ;
- }
- //判断如果是充值页就不加载福利广告,tabbar单独解析福利广告
- console.log(pageCode);
- if(pageCode !='charge'){
- window.ad_welfare && window.ad_welfare(localADData, pageCode);
- }
- //当前页设有有的广告点
- var localPositions = PAGE_POSITION_MAP[pageCode];
- for (var i = 0; i < localPositions.length; i++) {
- var positionIndex = localPositions[i];
- //当前页某点地广告策略数组集
- var positionData = positions[positionIndex];
- if (!positionData) {
- continue;
- }
- //某点广告的插入函数参数:策略集合、渠道、当前页具体点位、某页面
- _renderPositionAD(positionData, materials, positionIndex,pageCode);
- }
- }
- // 渲染当前页面某点广告
- function _renderPositionAD(positionData, materials, positionIndex,pageCode) {
- // 策略中的权重
- var maxWeight = 0;
- // 各权重包含的策略
- var classifyStrategies = {};
- var strategyKeys = Object.keys(positionData);
- var count = 0;
- for (var i = 0; i < strategyKeys.length; i++) {
- var strategyId = strategyKeys[i];
- //点中的某一个策略对象{}
- var strategy = positionData[strategyId];
- var weight = strategy.weight;
- if (!classifyStrategies[weight]) {
- classifyStrategies[weight] = [];
- }
- var now = new Date().getTime();
- // 只收集在推广期内的广告
- $.extend(strategy,{ad_ids:strategyId});
- if(strategy.show_starttime * 1000 < now && strategy.show_endtime * 1000 > now){
- classifyStrategies[weight].push(strategy);
- if (weight > maxWeight) {
- maxWeight = weight;
- }
- count+=1;
- }
- }
- if(count == 0){
- return;
- }
- var maxWeightStrategy = classifyStrategies[maxWeight];
- //多少个广告策略
- var maxWeightStrategySize = maxWeightStrategy && maxWeightStrategy.length;
- var resultIndex = maxWeightStrategySize > 1 ? Math.floor(Math.random() * maxWeightStrategySize) : 0;
- if(positionIndex == AD_POSITION_CODE.BOOK_READING_NEXT_CHAPTER){
- read_chapter = maxWeightStrategy[resultIndex].chapter_num;
- }
- _renderAD(maxWeightStrategy[resultIndex],positionIndex,pageCode,materials);
- }
- function _renderAD(ADData,positionIndex,pageCode,materials){
- switch (pageCode){
- case PAGE_CODE.BOOK_DETAIL:
- _renderDetailAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.BOOK_READING:
- _renderReadingAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.BOOK_SHELF:
- _renderShelfAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.RECENT_READ:
- _renderRecentAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.TYPING:
- _renderTypingAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.CHARGE:
- _renderChargeAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.MY:
- _renderMyAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.RANKING_LIST:
- _renderRankingListAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.CATEGORY_MAIN:
- _renderCategoryMainAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.CATEGORY_SUB:
- _renderCategorySubAD(ADData,positionIndex,materials);
- break;
- case PAGE_CODE.BOOK_STORE:
- _renderBookStoreAD(ADData,positionIndex,materials);
- }
- }
- function _renderDetailAD(ADData,positionIndex,materials){
- if(AD_POSITION_CODE.BOOK_DETAIL_FLOW == positionIndex){
- _renderFlow(ADData,positionIndex,materials);
- }else{
- if(ADData.is_slide == 1){
- _renderSlide(ADData,positionIndex,materials);
- }else{
- _renderLarge(ADData,positionIndex,materials);
- }
- }
- }
- function _renderReadingAD(ADData,positionIndex,materials){
- if(window.location.pathname.indexOf('ad_chapter')>0){
- positionIndex == AD_POSITION_CODE.BOOK_READING_DELIVER && _renderADChapter(ADData,positionIndex,materials);
- return;
- }
- switch (positionIndex){
- case AD_POSITION_CODE.BOOK_READING_BOTTOM:
- if(ADData.is_slide == 1){
- _renderSlide(ADData,positionIndex,materials);
- }else{
- _renderLarge(ADData,positionIndex,materials);
- }
- break;
- case AD_POSITION_CODE.BOOK_READING_MENU:
- _renderSmall(ADData,positionIndex,materials);
- break;
- case AD_POSITION_CODE.BOOK_READING_MIDDLE_PRIMARY:
- var programs = $('.read_main_p').find('p');
- length = programs.length;
- if(length>0) {
- // 垃圾代码 ···
- var params = _getADMaskParams(positionIndex);
- // 垃圾代码结束
- var position = Math.floor(length * .25);
- _renderPrimary(ADData,positionIndex,materials,programs,position,params.hasBeStillToday,params.showMask);
- }
- break;
- case AD_POSITION_CODE.BOOK_READING_MIDDLE_LARGE:
- var programs = $('.read_main_p').find('p');
- length = programs.length;
- if(length>0) {
- // 垃圾代码 ···
- var params = _getADMaskParams(positionIndex);
- // 垃圾代码结束
- var position = Math.floor(length * .5);
- _renderLarge(ADData,positionIndex,materials,programs,position,params.hasBeStillToday,params.showMask);
- }
- break;
- case AD_POSITION_CODE.BOOK_READING_MIDDLE_THIRD:
- var programs = $('.read_main_p').find('p');
- length = programs.length;
- if(length>0) {
- // 垃圾代码 ···
- var params = _getADMaskParams(positionIndex);
- // 垃圾代码结束
- var position = Math.floor(length * .75);
- _renderPrimary(ADData,positionIndex,materials,programs,position,params.hasBeStillToday,params.showMask);
- }
- break;
- case AD_POSITION_CODE.BOOK_READING_NEXT_CHAPTER:
- _renderLarge(ADData,positionIndex,materials);
- break;
- case AD_POSITION_CODE.BOOK_READING_DELIVER:
- _renderADChapter(ADData,positionIndex,materials);
- break;
- case AD_POSITION_CODE.BOOK_READING_TOP_BANNER:
- var lastCloseTime = localStorage.getItem(READING_BANNER_CLOSE_TIME) || 0;
- //浮窗广告时间间隔,测试调到5分钟 上线得调回到15
- var latingTime = 15*60*1000;
- if($('.ad_welfare_banner').css('display') == 'none' && new Date().getTime()-lastCloseTime >= latingTime){
- // $('.ad_position_18').show();
- if(ADData.is_slide == 1){
- _renderSlide(ADData,positionIndex,materials);
- }else{
- _renderLarge(ADData,positionIndex,materials);
- }
- $('.ad_position_18_close').unbind().bind('click',function(e){
- //??????????????
- e.stopPropagation();
- $('.ad_position_18').hide();
- localStorage.setItem(READING_BANNER_CLOSE_TIME,new Date().getTime());
- });
- }else{
- console.log("福利广告已显示");
- $('.ad_position_18').hide();
- }
- }
- }
- function _getADMaskParams(positionIndex){
- var hasBeStillToday = 'no';
- var showMask = Math.random() < window.$ad_rate_chapter;
- var today = new Date(new Date().toLocaleDateString()).getTime();
- var stillClickPositionStatus = localStorage.getItem('still_click_position_'+positionIndex);
- stillClickPositionStatus = stillClickPositionStatus ? JSON.parse(stillClickPositionStatus) : null;
- if(stillClickPositionStatus){
- var lastRecord = stillClickPositionStatus.time;
- if(lastRecord<today){
- hasBeStillToday = 'no';
- }else{
- hasBeStillToday = stillClickPositionStatus.beStill;
- }
- }else{
- localStorage.setItem('still_click_position_'+positionIndex,JSON.stringify({beStill:'no',time:new Date().getTime()}));
- }
- return {
- hasBeStillToday: hasBeStillToday,
- showMask: showMask
- };
- }
- function _renderShelfAD(ADData,positionIndex,materials){
- _renderLarge(ADData,positionIndex,materials);
- }
- function _renderRecentAD(ADData,positionIndex,materials){
- _renderLarge(ADData,positionIndex,materials);
- }
- function _renderTypingAD(ADData,positionIndex,materials){
- if(ADData.is_slide == 1){
- _renderSlide(ADData,positionIndex,materials);
- }else{
- _renderLarge(ADData,positionIndex,materials);
- }
- }
- function _renderChargeAD(ADData,positionIndex,materials){
- _renderAlert(ADData,positionIndex,materials);
- }
- function _renderMyAD(ADData,positionIndex,materials){
- if(AD_POSITION_CODE.MY_CHECKIN_ALERT == positionIndex){
- if($('.ad_welfare_sign').css('display') != 'none'){
- return;
- }
- }
- _renderLarge(ADData,positionIndex,materials);
- }
- function _renderRankingListAD(ADData,positionIndex,materials){
- var contain = $(window.rankingContentMain);
- var programs = contain.find('.section-block');
- length = programs.length;
- if(length == 0){
- if(contain.find('.ad-image').length == 0){
- contain.append('<div class="ad_position_14"></div>');
- _renderLarge(ADData,positionIndex,materials);
- }
- }else{
- contain.find('.ad_position_14').remove();
- var existedAD = contain.find('.ad-image');
- // 页面上已存在广告,不再渲染新的广告
- if(existedAD.length>0){
- return;
- }
- var position = length >= 4 ? 2 : (length-1);
- _renderLarge(ADData,positionIndex,materials,programs,position);
- }
- }
- function _renderCategoryMainAD(ADData,positionIndex,materials){
- if(ADData.is_slide == 1){
- _renderSlide(ADData,positionIndex,materials);
- }else{
- _renderLarge(ADData,positionIndex,materials);
- }
- }
- function _renderCategorySubAD(ADData,positionIndex,materials){
- var contain = $('.r_img_ul');
- var programs = contain.find('.section-block');
- length = programs.length;
- if(length == 0){
- if($('.ad_position_16').find('.ad-image').length == 0){
- _renderLarge(ADData,positionIndex,materials);
- }
- }else{
- var existedAD = contain.find('.ad-image');
- // 页面上已存在广告,不再渲染新的广告
- if(existedAD.length>0){
- return;
- }
- var position = length >= 4 ? 2 : (length-1);
- _renderLarge(ADData,positionIndex,materials,programs,position);
- }
- }
- function _renderBookStoreAD(ADData,positionIndex,materials){
- if(AD_POSITION_CODE.BOOK_STORE_FLOW == positionIndex){
- _renderFlow(ADData,positionIndex,materials);
- }
- if(AD_POSITION_CODE.BOOK_STORE_TOP_BANNER == positionIndex){
- _renderBookStoreSlide(ADData,positionIndex,materials);
- }
- if(AD_POSITION_CODE.BOOK_STORE_MIDDLE_BANNER == positionIndex){
- var contain = $('.body_sytle');
- var programs = contain.find('.i_module_box');
- length = programs.length;
- _renderLarge(ADData,positionIndex,materials,programs,0);
- }
- }
- function _renderSlide(ADData,positionIndex,materials){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,3);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- if(positionIndex==AD_POSITION_CODE.BOOK_READING_TOP_BANNER){
- $('.ad_position_18').show();
- }
- var randomMaterialItems = materialItems;
- var template = (positionIndex == AD_POSITION_CODE.BOOK_READING_BOTTOM ? '':'<div class="ad_image_warp">')+
- '<div class="i_slide_box_ad">'+
- '<div class="ad-swiper-container">'+
- '<div class="swiper-wrapper">';
- var baiduCode = [];
- var js_code = '';
- for(var j = 0;j<randomMaterialItems.length;j++){
- var randomMaterialItem = randomMaterialItems[j];
- if(randomMaterialItem.type == 0){
- template+= '<div class="swiper-slide section-block">'+
- '<img class="ad-image-tip" src="http://'+window.location.host+'/assets/img/frontend/ad/ad_tip.png" />'+
- '<div href="javascript:;" class="ad-image" data-link-url="'+randomMaterialItem.link_url+'" data-m-id="'+randomMaterialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'"><img alt="" src="'+randomMaterialItem.img_url+'"/></div>'+
- '</div>';
- } else if(randomMaterialItem.type == 1){
- js_code = randomMaterialItem.js_code;
- template+= '<div class="swiper-slide section-block">'+
- '<div class="ad-image js_ad" data-type="1"></div>'+
- '</div>';
- } else if(randomMaterialItem.type == 2){
- baiduCode.push(randomMaterialItem.ad_baidu);
- template+= '<div class="swiper-slide section-block">'+
- '<div class="ad-image"><div class="'+randomMaterialItem.ad_baidu+'"></div></div>'+
- '</div>';
- }
- _sendLog(ADData.ad_ids,positionIndex,randomMaterialItem.material_id);
- }
- template+='</div>'+
- '<div class="swiper-pagination"></div>'+
- '</div>'+
- '</div>'+
- (positionIndex == AD_POSITION_CODE.BOOK_READING_BOTTOM ? '':'</div>');
- $('.ad_position_'+positionIndex).append(template);
- // 渲染js和百度广告
- var jsElement = $('.ad_position_'+positionIndex+' .js_ad');
- jsElement.length && js_code && postscribe(jsElement[0], js_code);
- for(var k=0;k<baiduCode.length;k++){
- (window.slotbydup = window.slotbydup || []).push({
- id: baiduCode[k],
- container: baiduCode[k],
- async: true
- });
- }
- _addListener();
- _initSwiper();
- }
- function _renderBookStoreSlide(ADData,positionIndex,materials){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,3);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- $('.body_sytle .i_slide_box').hide();
- var randomMaterialItems = materialItems;
- var template = '<div class="ad_image_warp"><div class="i_slide_box_ad">'+
- '<div class="ad-swiper-container">'+
- '<div class="swiper-wrapper">';
- var baiduCode = [];
- var js_code = '';
- for(var j = 0;j<randomMaterialItems.length;j++){
- var randomMaterialItem = randomMaterialItems[j];
- if(randomMaterialItem.type == 0){
- template+= '<div class="swiper-slide section-block">'+
- '<img class="ad-image-tip" src="http://'+window.location.host+'/assets/img/frontend/ad/ad_tip.png" />'+
- '<div class="ad-image" data-link-url="'+randomMaterialItem.link_url+'" data-m-id="'+randomMaterialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'"><img alt="" src="'+randomMaterialItem.img_url+'"/></div>'+
- '</div>';
- } else if(randomMaterialItem.type == 1){
- js_code = randomMaterialItem.js_code;
- template+= '<div class="swiper-slide section-block">'+
- '<div class="ad-image js_ad" data-type="1"></div>'+
- '</div>';
- } else if(randomMaterialItem.type == 2){
- baiduCode.push(randomMaterialItem.ad_baidu);
- template+= '<div class="swiper-slide section-block">'+
- '<div class="ad-image"><div class="'+randomMaterialItem.ad_baidu+'"></div></div>'+
- '</div>';
- }
- _sendLog(ADData.ad_ids,positionIndex,randomMaterialItem.material_id);
- }
- template+='</div>'+
- '<div class="swiper-pagination"></div>'+
- '</div>'+
- '</div></div>';
- $('.ad_position_'+positionIndex).append(template);
- // 渲染js和百度广告
- var jsElement = $('.ad_position_'+positionIndex+' .js_ad');
- jsElement.length && js_code && postscribe(jsElement[0], js_code);
- for(var k=0;k<baiduCode.length;k++){
- (window.slotbydup = window.slotbydup || []).push({
- id: baiduCode[k],
- container: baiduCode[k],
- async: true
- });
- }
- _addListener();
- _initSwiper();
- }
- function _renderSmall(ADData,positionIndex,materials){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,1);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- var materialItem = materialItems[0];
- if(materialItem.type==0){
- var template = '<div class="ad-image-small ad-image" class="ad-image" data-link-url="'+materialItem.link_url+'" data-m-id="'+materialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'">'+
- '<img class="ad-image-tip" src="http://'+window.location.host+'/assets/img/frontend/ad/ad_tip.png" />'+
- '<img src="'+materialItem.img_url+'" alt=""/>'+
- '</div>';
- $('.ad_position_'+positionIndex).append(template);
- }else if(materialItem.type==1){
- var containElement = $('<div class="ad-image-small ad-image" data-type="1"></div>');
- $('.ad_position_'+positionIndex).append(containElement);
- postscribe(containElement[0], materialItem.js_code);
- }else if(materialItem.type==2){
- $('.ad_position_'+positionIndex).append('<div class="ad-image-small ad-image" data-type="2"><div class="'+materialItem.ad_baidu+'"></div></div>');
- (window.slotbydup = window.slotbydup || []).push({
- id: materialItem.ad_baidu,
- container: materialItem.ad_baidu,
- async: true
- });
- }
- _sendLog(ADData.ad_ids,positionIndex,materialItem.material_id);
- _addListener();
- }
- function _renderPrimary(ADData,positionIndex,materials,willInsertElements,insertPosition,hasBeStillToday,showMask){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,1);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- var materialItem = materialItems[0];
- if(materialItem.type == 0){
- var template = '<div class="ad-image-primary ad-image" class="ad-image" data-link-url="'+materialItem.link_url+'" data-m-id="'+materialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'">'+
- '<img class="ad-image-tip" src="http://'+window.location.host+'/assets/img/frontend/ad/ad_tip.png" />'+
- '<img src="'+materialItem.img_url+'" alt=""/>'+
- // 垃圾代码:展示范围
- (hasBeStillToday && hasBeStillToday == 'no' && showMask ?'<div class="ad-mask"></div>':'')+
- '</div>';
- if(willInsertElements && insertPosition) {
- $(willInsertElements[insertPosition]).after(template);
- }
- }else if(materialItem.type==1){
- var container = $('<div class="ad-image ad-image-primary" data-type="1" data-position="'+positionIndex+'">'+
- // 垃圾代码:展示范围
- (hasBeStillToday && hasBeStillToday == 'no' && showMask ?'<div class="ad-mask"></div>':'')+
- '</div>');
- if(willInsertElements && insertPosition) {
- $(willInsertElements[insertPosition]).after(container);
- postscribe(container[0], materialItem.js_code);
- }
- }else if(materialItem.type==2){
- if(willInsertElements && insertPosition) {
- $(willInsertElements[insertPosition]).after('<div class="'+materialItem.ad_baidu+' ad-image"></div>');
- (window.slotbydup = window.slotbydup || []).push({
- id: materialItem.ad_baidu,
- container: materialItem.ad_baidu,
- async: true
- });
- }
- }
- _sendLog(ADData.ad_ids,positionIndex,materialItem.material_id);
- _addListener();
- }
- function _renderLarge(ADData,positionIndex,materials,willInsertElements,insertPosition,hasBeStillToday,showMask){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,1);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- if(positionIndex==AD_POSITION_CODE.BOOK_READING_TOP_BANNER){
- $('.ad_position_18').show();
- }
- var materialItem = materialItems[0];
- if(materialItem.type == 0){
- var template = ((positionIndex == AD_POSITION_CODE.BOOK_READING_BOTTOM || positionIndex == AD_POSITION_CODE.BOOK_READING_NEXT_CHAPTER || positionIndex == AD_POSITION_CODE.BOOK_READING_MIDDLE_LARGE || positionIndex == AD_POSITION_CODE.RANKING_LIST || positionIndex == AD_POSITION_CODE.BOOK_READING_TOP_BANNER) ? '':'<div class="ad_image_warp">')+
- '<div class="ad-image-large ad-image" class="ad-image" data-link-url="'+materialItem.link_url+'" data-m-id="'+materialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'">'+
- '<img class="ad-image-tip" src="http://'+window.location.host+'/assets/img/frontend/ad/ad_tip.png" />'+
- '<img src="'+materialItem.img_url+'" alt=""/>'+
- // 垃圾代码:展示范围
- (hasBeStillToday && hasBeStillToday == 'no' && showMask ?'<div class="ad-mask"></div>':'')+
- '</div>'+
- ((positionIndex == AD_POSITION_CODE.BOOK_READING_BOTTOM || positionIndex == AD_POSITION_CODE.BOOK_READING_NEXT_CHAPTER || positionIndex == AD_POSITION_CODE.BOOK_READING_MIDDLE_LARGE || positionIndex == AD_POSITION_CODE.RANKING_LIST) ? '':'</div>');
- if(willInsertElements && insertPosition>=0) {
- $(willInsertElements[insertPosition]).after(template);
- }else{
- $('.ad_position_'+positionIndex).append(template);
- }
- }else if(materialItem.type==1){
- var container = $('<div class="ad-image ad-image-large" data-type="1" data-position="'+positionIndex+'">'+
- // 垃圾代码:展示范围
- (hasBeStillToday && hasBeStillToday == 'no' && showMask ?'<div class="ad-mask"></div>':'')+
- '</div>');
- if(willInsertElements && insertPosition>=0) {
- $(willInsertElements[insertPosition]).after(container);
- }else{
- $('.ad_position_'+positionIndex).append(container);
- }
- postscribe(container[0], materialItem.js_code);
- }else if(materialItem.type==2){
- if(willInsertElements && insertPosition>=0) {
- $(willInsertElements[insertPosition]).after('<div class="'+materialItem.ad_baidu+' ad-image"></div>');
- }else{
- $('.ad_position_'+positionIndex).append('<div class="'+materialItem.ad_baidu+' ad-image"></div>');
- }
- (window.slotbydup = window.slotbydup || []).push({
- id: materialItem.ad_baidu,
- container: materialItem.ad_baidu,
- async: true
- });
- }
- // 下一章所对应广告在弹窗中,不能在初始化时直接打点曝光 ,此项曝光在弹窗显示时打点,见:simpleAD.showReadAlert
- if(positionIndex != AD_POSITION_CODE.BOOK_READING_NEXT_CHAPTER){
- _sendLog(ADData.ad_ids,positionIndex,materialItem.material_id);
- }
- _addListener();
- if(positionIndex == AD_POSITION_CODE.MY_CONTENT){
- $('.ad_other_item').hide();
- }
- }
- function _renderFlow(ADData,positionIndex,materials){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,1);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- var materialItem = materialItems[0];
- var template = '<div class="ad-image-large ad-image" class="ad-image" data-link-url="'+materialItem.link_url+'" data-m-id="'+materialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'">'+
- '<img src="'+materialItem.img_url+'" alt=""/>'+
- '</div>';
- $('.ad_position_'+positionIndex).append(template);
- _sendLog(ADData.ad_ids,positionIndex,materialItem.material_id);
- _addListener();
- }
- function _renderAlert(ADData,positionIndex,materials){
- if(!ADData || ADData.material_ids && ADData.material_ids.length<1){
- return;
- }
- var materialItems = _getSortedMaterials(ADData,materials,1);
- if(!materialItems || materialItems.length == 0){
- return;
- }
- var materialItem = materialItems[0];
- var materialItem = materialItems[0];
- if(materialItem.type == 0){
- var template = '<div class="ad-image-large ad-image" class="ad-image" data-link-url="'+materialItem.link_url+'" data-m-id="'+materialItem.material_id+'" data-user-id="'+simpleAD.userId+'" data-position="'+positionIndex+'" data-ad-ids="'+ADData.ad_ids+'">'+
- '<img class="ad-image-tip" src="http://'+window.location.host+'/assets/img/frontend/ad/ad_tip.png" />'+
- '<img src="'+materialItem.img_url+'" alt=""/>'+
- '</div>';
- $('.ad_position_'+positionIndex).append(template);
- }else if(materialItem.type==1){
- var container = $('<div class="ad-image"></div>');
- $('.ad_position_'+positionIndex).append(container);
- postscribe(container[0], materialItem.js_code);
- }else if(materialItem.type==2){
- $('.ad_position_'+positionIndex).append('<div class="'+materialItem.ad_baidu+' ad-image"></div>');
- (window.slotbydup = window.slotbydup || []).push({
- id: materialItem.ad_baidu,
- container: materialItem.ad_baidu,
- async: true
- });
- }
- _addListener();
- }
- function _renderADChapter(ADData,positionIndex,materials){
- if(window.location.pathname.indexOf('ad_chapter')>0){
- _renderLarge(ADData,positionIndex,materials);
- }else{
- // TODO:获取当前章节索引
- if((window.ad_chapter_index-ADData.chapter_start_num)%ADData.chapter_step_num == 0){
- shouldGoToADChapter = true;
- }else{
- shouldGoToADChapter = false;
- }
- var materialItems = _getSortedMaterials(ADData,materials,1);
- // 如果没有匹配到可展示素材,也不应该跳转到阅读页整屏插屏广告页
- if(!materialItems || materialItems.length == 0){
- shouldGoToADChapter = false;
- }
- }
- }
- function _getSortedMaterials(ADData,materials,count){
- var materialItems = [];
- var jsMaterialItems = [];
- var baiduMaterialItems = [];
- var weightClassifyItems = {};
- var materialKeys = ADData.material_ids || [];
- for (var i = 0;i<materialKeys.length;i++){
- var materialItemKey = materialKeys[i];
- var materialItem = materials[materialItemKey];
- var now = new Date().getTime();
- if(materialItem && materialItem.show_starttime * 1000 < now && materialItem.show_endtime * 1000 > now){
- materialItem = $.extend(true,{material_id:materialItemKey},materialItem);
- var weight = materialItem.weight;
- !weightClassifyItems[weight] && (weightClassifyItems[weight] = []);
- weightClassifyItems[weight].push(materialItem);
- }
- }
- var weightClassifyItemsKeys = Object.keys(weightClassifyItems);
- weightClassifyItemsKeys.sort(function(pre,next){
- return next -pre;
- });
- for(var j=0;j<weightClassifyItemsKeys.length;j++){
- // 还需要的素材个数
- var needToInsertNumber = count - materialItems.length;
- if(needToInsertNumber == 0){
- return materialItems;
- }
- // 当前权重的值
- var weightClassifyItemsKey = weightClassifyItemsKeys[j];
- // 当前权重所包含的全部素材
- var weightClassifyMaterialItems = weightClassifyItems[weightClassifyItemsKey];
- // 素材个数
- var length = weightClassifyMaterialItems.length;
- jsMaterialItems = [];
- baiduMaterialItems = [];
- // 遍历当前权重素材,找出js广告和百度广告
- for(var x=0;x<length;x++){
- var item = weightClassifyMaterialItems[x];
- // JS广告
- if(item.type == 1){
- jsMaterialItems = jsMaterialItems.concat(weightClassifyMaterialItems.splice(x,1));
- length -= 1;
- // 重新开始过滤
- x = -1;
- }
- // 百度广告
- if(item.type == 2){
- baiduMaterialItems = baiduMaterialItems.concat(weightClassifyMaterialItems.splice(x,1));
- length -= 1;
- // 重新开始过滤
- x = -1;
- }
- }
- // 优先筛选js广告
- if(jsMaterialItems.length){
- var jsFitItems = _getRandomItems(jsMaterialItems,needToInsertNumber);
- if(jsFitItems.length){
- materialItems = materialItems.concat(jsFitItems);
- needToInsertNumber = needToInsertNumber-jsFitItems.length;
- jsFitItems = [];
- if(needToInsertNumber == 0){
- return materialItems;
- }
- }
- }
- // 其次筛选百度广告
- if(baiduMaterialItems.length){
- var baiduFitItems = _getRandomItems(baiduMaterialItems,needToInsertNumber);
- if(baiduFitItems.length){
- materialItems = materialItems.concat(baiduFitItems);
- needToInsertNumber = needToInsertNumber-baiduFitItems.length;
- baiduFitItems = [];
- if(needToInsertNumber == 0){
- return materialItems;
- }
- }
- }
- // 如果js广告和百度广告没有获取到足够素材,则从剩余素材中随机选取所需素材
- var imageItems = _getRandomItems(weightClassifyMaterialItems,needToInsertNumber);
- if(imageItems.length){
- materialItems = materialItems.concat(imageItems);
- needToInsertNumber = needToInsertNumber-imageItems.length;
- imageItems = [];
- if(needToInsertNumber == 0){
- return materialItems;
- }else{
- continue;
- }
- }else{
- continue;
- }
-
- }
- return materialItems;
- }
- function _getRandomItems(totalItems,needToInsertNumber){
- var materialItems = [];
- // 素材个数小于所需素材数
- var length = totalItems.length;
- if(length <=needToInsertNumber){
- materialItems = materialItems.concat(totalItems);
- //素材个数大于所需素材数
- }else{
- // 从当前权重素材中随机取 needToInsertNumber 个素材
- for(var k=0;k<needToInsertNumber;k++){
- materialItems.push(totalItems.splice(Math.floor(Math.random()*length),1)[0]);
- length -= 1;
- }
- }
- return materialItems;
- }
- function _sendLog(adIds,position,mId){
- cpslog([702, {
- map: {
- ad_ids:parseInt(adIds),
- position:position,
- material_id:mId,
- channel_id: simpleAD.channelId || '',
- user_id:simpleAD.userId || ''
- }
- }, 'ad_sys_show']);
- }
- function _addListener(){
- $('.ad-image').unbind().bind('click',function(e){
- e.stopPropagation();
- var target = e.currentTarget;
- var mId = target.dataset.mId;
- var adIds = target.dataset.adIds;
- var position = target.dataset.position;
- var userId = target.dataset.userId;
- var type = target.dataset.type;
-
- // 垃圾代码:用户主动点击后,记录到localstorage中
- if($(e.target).hasClass('ad-mask')){
- localStorage.removeItem('still_click_position_'+position);
- localStorage.setItem('still_click_position_'+position,JSON.stringify({beStill:'yes',time:new Date().getTime()}));
- }
- cpslog([702, {
- map: {
- ad_ids:adIds,
- position:position,
- material_id:mId,
- channel_id: simpleAD.channelId || '',
- user_id:simpleAD.userId || ''
- }
- }, 'ad_sys_click']);
- if(type && type != 0){
- if($(e.target).hasClass('ad-image') || $(e.target).hasClass('ad-mask')){
- $(target).find('#equjhhhh a').click();
- return false;
- }
- }
- target.dataset.linkUrl && (location.href = target.dataset.linkUrl);
- });
- }
- function _initSwiper(){
- var ad_swiper = new Swiper('.ad-swiper-container', {
- loop : false,
- centeredSlides: true,
- autoplay: {
- delay: 2500,
- disableOnInteraction: false,
- },
- pagination: {
- el: '.swiper-pagination',
- clickable: true,
- },
- });
- }
- window.AD_PAGE_CODE = PAGE_CODE;
- window.simpleAD = simpleAD;
- });
|