Wangwei
2 years ago
8 changed files with 422 additions and 341 deletions
@ -0,0 +1,151 @@
|
||||
/** |
||||
* 广告调用SDK |
||||
* 2023-04-11 by Wangwei |
||||
*/ |
||||
|
||||
import axios from "axios"; |
||||
const fineAd = (window.fineAd = window.fineAd || {}); |
||||
fineAd.options = fineAd.options || {}; |
||||
|
||||
/** |
||||
* 初始化SDK配置 |
||||
* @param debug |
||||
* @param dev |
||||
* @param adApiUrl |
||||
*/ |
||||
const config = ({ debug = false, dev = false, adApiUrl }) => { |
||||
fineAd.options = { |
||||
...fineAd.options, |
||||
debug, |
||||
dev, |
||||
adApiUrl: dev ? 'https://testjdy.fanruan.com/fcoin' : 'https://home.fanruan.com/fcoin', |
||||
}; |
||||
if(debug){ |
||||
console.log('adApiUrl', fineAd.config.adApiUrl); |
||||
} |
||||
}; |
||||
|
||||
|
||||
/** |
||||
* 获取并展示指定广告id的广告位 |
||||
* @param adId 广告位id |
||||
* @param adId2 如果adId没有匹配到则显示第二个广告位 |
||||
* @param top 顶边距 |
||||
* @param bottom 底边距 |
||||
*/ |
||||
const getAdvertisement = async ({adId, adId2, top, bottom}) => { |
||||
const { debug, dev } = fineAd.options; |
||||
const dataPath = dev ? 'test' : 'prod'; |
||||
await axios.get("https://shequ-oss.obs.cn-east-2.myhuaweicloud.com/digit/ad/data/" + dataPath + "/advertisement.json?v=" + Date.now()) |
||||
.then(function (res) { |
||||
var isAdId = false; |
||||
res.data.forEach((item) => { |
||||
if(item.adId === adId){ |
||||
isAdId = true; |
||||
let getSize = splitPicSize(item.picSize); |
||||
if(debug){ |
||||
console.group("advertisement " + adId); |
||||
console.log('item',item); |
||||
console.log('picSize',getSize); |
||||
console.log('top',top); |
||||
console.log('bottom',bottom); |
||||
console.groupEnd(); |
||||
} |
||||
let adDomId = document.getElementById('AD-' + adId); |
||||
adDomId.innerHTML=''; |
||||
window.fineAd.adMargin({ adId:adId, top:top }); |
||||
// 无链接图片广告
|
||||
if(!item.adLink && item.type===1){ |
||||
adDomId.innerHTML+=`<img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}">`; |
||||
} |
||||
// 有链接图片广告
|
||||
if(item.adLink && item.type===1){ |
||||
adDomId.innerHTML+=`<a onClick="window.fineAd.advertisementHits('${adId}');" href="${item.adLink}" target="_blank"><img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}"></a>`; |
||||
} |
||||
// 有链接文本广告
|
||||
if(item.adLink && item.type===2){ |
||||
adDomId.innerHTML+=`<a onClick="window.fineAd.advertisementHits('${adId}');" href="${item.adLink}" target="_blank">${item.adText}</a>`; |
||||
} |
||||
window.fineAd.adMargin({ adId:adId, bottom:bottom }); |
||||
} |
||||
}); |
||||
|
||||
// 找第二个广告位
|
||||
if(adId2 && !isAdId){ |
||||
res.data.forEach((item) => { |
||||
if(item.adId === adId2){ |
||||
console.log('isAdId',isAdId); |
||||
let getSize = splitPicSize(item.picSize); |
||||
if(debug){ |
||||
console.group("advertisement " + adId2); |
||||
console.log('item',item); |
||||
console.log('picSize',getSize); |
||||
console.log('top',top); |
||||
console.log('bottom',bottom); |
||||
console.groupEnd(); |
||||
} |
||||
let adDomId = document.getElementById('AD-' + adId2); |
||||
adDomId.innerHTML=''; |
||||
window.fineAd.adMargin({ adId:adId2, top:top }); |
||||
// 有链接图片广告
|
||||
if(item.adLink && item.type===1){ |
||||
adDomId.innerHTML=`<a onClick="window.fineAd.advertisementHits('${adId2}');" href="${item.adLink}" target="_blank"><img width="${getSize.w}" height="${getSize.h}" src="${item.picUrl}"></a>`; |
||||
} |
||||
// 有链接文本广告
|
||||
if(item.adLink && item.type===2){ |
||||
adDomId.innerHTML=`<a onClick="window.fineAd.advertisementHits('${adId2}');" href="${item.adLink}" target="_blank">${item.adText}</a>`; |
||||
} |
||||
window.fineAd.adMargin({ adId:adId2, bottom:bottom }); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
}) |
||||
.catch(function (error) { |
||||
console.log('ad error',error); |
||||
}); |
||||
}; |
||||
|
||||
/** |
||||
* 广告边距 |
||||
* @param top 顶边距 |
||||
* @param bottom 底边距 |
||||
*/ |
||||
const adMargin = ({ adId, top = 0, bottom = 0 }) => { |
||||
let adDomId = document.getElementById('AD-' + adId); |
||||
if(top > 0){ |
||||
adDomId.innerHTML+=`<div style="height:${top}px;"></div>`; |
||||
}else if(bottom > 0){ |
||||
adDomId.innerHTML+=`<div style="height:${bottom}px;"></div>`; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 拆分广告位尺寸 |
||||
* @param adSize 广告位尺寸 |
||||
* @return Array[w,h] 宽和高 |
||||
*/ |
||||
const splitPicSize = (adSize) =>{ |
||||
let {w,h} = {w:'',h:''}; |
||||
if(adSize){ |
||||
let {[0]:w,[1]:h} = adSize.replace(/\s/g,"").split('*'); |
||||
return {w,h}; |
||||
}else{ |
||||
return {w,h}; |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 广告位埋点 |
||||
* @param adId 广告位id |
||||
*/ |
||||
const advertisementHits = (adId) =>{ |
||||
const { adApiUrl } = fineAd.options; |
||||
axios.get(adApiUrl + "/api/advertisement/hits/" + adId); |
||||
} |
||||
|
||||
fineAd.config = config; |
||||
fineAd.adMargin = adMargin; |
||||
fineAd.getAdvertisement = getAdvertisement; |
||||
fineAd.advertisementHits = advertisementHits; |
||||
|
Loading…
Reference in new issue