uniapp通過概率實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的項(xiàng)目實(shí)踐
在很多電商平臺(tái)或者活動(dòng)中,都會(huì)有類似“抽獎(jiǎng)贏優(yōu)惠券”的功能。這個(gè)功能通常要求用戶通過某些隨機(jī)算法來決定是否中獎(jiǎng)以及獲得的優(yōu)惠券內(nèi)容。實(shí)現(xiàn)這一功能時(shí),如何正確地處理中獎(jiǎng)概率、抽取優(yōu)惠券并返回抽獎(jiǎng)結(jié)果是一個(gè)常見的問題。
本文將介紹如何通過一些代碼操作邏輯實(shí)現(xiàn)一個(gè)抽獎(jiǎng)系統(tǒng),模擬從接口獲取優(yōu)惠券,并基于優(yōu)惠券的中獎(jiǎng)概率來判斷是否中獎(jiǎng)。
首先需要從接口獲取優(yōu)惠券數(shù)據(jù)。然后通過生成一個(gè)隨機(jī)數(shù),并與優(yōu)惠券的中獎(jiǎng)概率進(jìn)行比較來判斷是否中獎(jiǎng)。如果中獎(jiǎng),渲染相應(yīng)的優(yōu)惠券信息;否則顯示未中獎(jiǎng)消息。將中獎(jiǎng)信息提交給后端接口,以記錄中獎(jiǎng)信息。

步驟一
- 使用
uni.request向后端接口發(fā)起請(qǐng)求,獲取所有的優(yōu)惠券數(shù)據(jù)。 - 請(qǐng)求成功后,將數(shù)據(jù)傳遞給
lotteryDraw函數(shù)來執(zhí)行后續(xù)的抽獎(jiǎng)邏輯。
const fetchWinRatio = async () => {
try {
uni.request({
url: BASE_URL + '/pay/cardlog/getcard', // 請(qǐng)求的 URL 地址
data: {
uid: 1, // 用戶 ID
},
method: 'GET', // 請(qǐng)求方法
success(res) {
const discountNo = res.data.data; // 獲取到的優(yōu)惠券數(shù)據(jù)
// 調(diào)用抽獎(jiǎng)函數(shù)
lotteryDraw(discountNo);
},
fail(err) {
console.error('請(qǐng)求失?。?, err); // 打印請(qǐng)求錯(cuò)誤信息
},
});
} catch (err) {
console.error('獲取中獎(jiǎng)比例失敗', err);
resultMessage.value = '獲取中獎(jiǎng)比例失敗,請(qǐng)重試';
}
};
步驟二
Math.random()生成一個(gè)介于0到1之間的隨機(jī)數(shù)。- 然后遍歷所有優(yōu)惠券,根據(jù)每個(gè)優(yōu)惠券的
win_ratio判斷是否中獎(jiǎng): - 如果隨機(jī)數(shù)小于或等于當(dāng)前優(yōu)惠券的
win_ratio,即認(rèn)為該優(yōu)惠券中獎(jiǎng)。 - 根據(jù)中獎(jiǎng)的優(yōu)惠券類型渲染不同的優(yōu)惠信息(如滿減、百分比優(yōu)惠等)。
const lotteryDraw = (discountNo) => {
// 生成 0 到 1 的隨機(jī)數(shù)
const randomNumber = Math.random();
console.log(`生成的隨機(jī)數(shù): ${randomNumber}`);
// 遍歷所有優(yōu)惠券
for (let i = 0; i < discountNo.length; i++) {
const coupon = discountNo[i];
// 判斷是否中獎(jiǎng)
if (randomNumber <= coupon.win_ratio) {
// 如果中獎(jiǎng),從優(yōu)惠券數(shù)組中選取當(dāng)前優(yōu)惠券
winningCoupon.value = coupon;
// 抽到了獎(jiǎng)券就將id賦值給裝獎(jiǎng)券id的變量
couponId.value = winningCoupon.value.id;
// 判斷類型是滿減時(shí)0
if (winningCoupon.value.type == 0) {
// 渲染抽到的獎(jiǎng)券減免
resultMessage.value = `滿${winningCoupon.value.min_money}元 可以減免${winningCoupon.value.discount}元`;
} else if (winningCoupon.value.type == 1) {
resultMessage.value = `滿${winningCoupon.value.min_money}元 可以減免百分之${winningCoupon.value.discount * 100}`;
}
} else {
resultMessage.value = '很遺憾,未抽到優(yōu)惠券';
}
}
};
步驟三
- 根據(jù)中獎(jiǎng)優(yōu)惠券的
type字段,分為兩種類型:滿減和百分比優(yōu)惠。 - 渲染具體的優(yōu)惠信息,并通過
resultMessage顯示。
if (winningCoupon.value.type == 0) {
resultMessage.value = `滿${winningCoupon.value.min_money}元 可以減免${winningCoupon.value.discount}元`;
} else if (winningCoupon.value.type == 1) {
resultMessage.value = `滿${winningCoupon.value.min_money}元 可以減免百分之${winningCoupon.value.discount * 100}`;
}
步驟四
- 使用
uni.request向后端接口發(fā)送抽獎(jiǎng)結(jié)果。 - 提交中獎(jiǎng)的優(yōu)惠券 ID(
cid)以及用戶的相關(guān)信息。
uni.request({
url: BASE_URL + '/pay/cardlog/lotto',
method: 'POST',
data: {
uid: decryptedData.value,
openid: openidArr.value,
type: numberWx.value,
cid: winningCoupon.value.id
},
success: (res) => {
console.log('抽獎(jiǎng)結(jié)果', res.data.data);
logId.value = res.data.data;
},
fail: (err) => {
console.error('請(qǐng)求失敗', err);
}
});
通過這幾個(gè)步驟,我們成功實(shí)現(xiàn)了一個(gè)簡單的抽獎(jiǎng)系統(tǒng)。系統(tǒng)首先從后端獲取優(yōu)惠券數(shù)據(jù),然后通過概率判斷是否中獎(jiǎng),最后將中獎(jiǎng)信息提交給后端。通過這種方式,我們可以實(shí)現(xiàn)一個(gè)靈活且高效的抽獎(jiǎng)系統(tǒng),適應(yīng)多種不同場(chǎng)景的需求。
到此這篇關(guān)于uniapp通過概率實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)uniapp 概率隨機(jī)抽獎(jiǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript實(shí)現(xiàn)檢驗(yàn)的各種規(guī)則
這篇文章主要介紹了javascript實(shí)現(xiàn)檢驗(yàn)的各種規(guī)則,涉及javascript針對(duì)手機(jī)號(hào)、郵箱、網(wǎng)址、漢字及圖片等相關(guān)檢測(cè)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
TypeScript轉(zhuǎn)javaScript的方法示例
本文主要介紹了TypeScript轉(zhuǎn)javaScript的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06
微信小程序?qū)崿F(xiàn)頁面跳轉(zhuǎn)傳值以及獲取值的方法分析
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)頁面跳轉(zhuǎn)傳值以及獲取值的方法,結(jié)合實(shí)例形式總結(jié)分析了微信小程序頁面跳轉(zhuǎn)及傳值的常用操作技巧,需要的朋友可以參考下2017-12-12
js 下拉菜單點(diǎn)擊旁邊收起實(shí)現(xiàn)(踩坑記)
這篇文章主要介紹了js 下拉菜單點(diǎn)擊旁邊收起實(shí)現(xiàn)(踩坑記),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09

