Bắt đầu lại từ đầu - Clean upload
All checks were successful
Deploy to Production / deploy (push) Successful in 10s
All checks were successful
Deploy to Production / deploy (push) Successful in 10s
This commit is contained in:
319
LessonCard-SquareCard/tdv_sdk.js
Normal file
319
LessonCard-SquareCard/tdv_sdk.js
Normal file
@@ -0,0 +1,319 @@
|
||||
var tdv_sdk = {};
|
||||
tdv_sdk.list = [
|
||||
{
|
||||
id: "gjkmg09",
|
||||
name: "dog",
|
||||
image: "https://image.senaai.tech/images/dog7.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_dog_06d80eb0.mp3",
|
||||
},
|
||||
{
|
||||
id: "2byl8ac",
|
||||
name: "cat",
|
||||
image: "https://image.senaai.tech/images/Cat.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_cat_d077f244.mp3",
|
||||
},
|
||||
{
|
||||
id: "yb4z60c",
|
||||
name: "fish",
|
||||
image: "https://image.senaai.tech/images/Clownfish.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_fish_83e4a96a.mp3",
|
||||
},
|
||||
{
|
||||
id: "7npcqv0",
|
||||
name: "bird",
|
||||
image: "https://image.senaai.tech/images/Bird31.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
|
||||
},
|
||||
{
|
||||
id: "pbb8nxj",
|
||||
name: "mouse",
|
||||
image: "https://image.senaai.tech/images/Gerbil3.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_mouse_40203abe.mp3",
|
||||
},
|
||||
{
|
||||
id: "pbb8nxj_cow",
|
||||
name: "cow", // Đã bổ sung con bò theo yêu cầu của bạn
|
||||
image: "https://image.senaai.tech/images/cow.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_cow_81566e98.mp3",
|
||||
},
|
||||
{
|
||||
id: "2byl8ac",
|
||||
name: "cat",
|
||||
image: "https://image.senaai.tech/images/Cat.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_cat_d077f244.mp3",
|
||||
},
|
||||
{
|
||||
id: "yb4z60c",
|
||||
name: "fish",
|
||||
image: "https://image.senaai.tech/images/Clownfish.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_fish_83e4a96a.mp3",
|
||||
},
|
||||
{
|
||||
id: "7npcqv0",
|
||||
name: "bird",
|
||||
image: "https://image.senaai.tech/images/Bird31.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
|
||||
},
|
||||
{
|
||||
id: "gjkmg09",
|
||||
name: "dog",
|
||||
image: "https://image.senaai.tech/images/dog7.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_dog_06d80eb0.mp3",
|
||||
},
|
||||
{
|
||||
id: "7npcqv0",
|
||||
name: "bird",
|
||||
image: "https://image.senaai.tech/images/Bird31.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
|
||||
},
|
||||
{
|
||||
id: "gjkmg09",
|
||||
name: "dog",
|
||||
image: "https://image.senaai.tech/images/dog7.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_dog_06d80eb0.mp3",
|
||||
},
|
||||
{
|
||||
id: "2byl8ac",
|
||||
name: "cat",
|
||||
image: "https://image.senaai.tech/images/Cat.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_cat_d077f244.mp3",
|
||||
},
|
||||
{
|
||||
id: "yb4z60c",
|
||||
name: "fish",
|
||||
image: "https://image.senaai.tech/images/Clownfish.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_fish_83e4a96a.mp3",
|
||||
},
|
||||
{
|
||||
id: "7npcqv0",
|
||||
name: "bird",
|
||||
image: "https://image.senaai.tech/images/Bird31.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
|
||||
},
|
||||
{
|
||||
id: "pbb8nxj",
|
||||
name: "mouse",
|
||||
image: "https://image.senaai.tech/images/Gerbil3.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_mouse_40203abe.mp3",
|
||||
},
|
||||
{
|
||||
id: "pbb8nxj_cow",
|
||||
name: "cow", // Đã bổ sung con bò theo yêu cầu của bạn
|
||||
image: "https://image.senaai.tech/images/cow.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_cow_81566e98.mp3",
|
||||
},
|
||||
{
|
||||
id: "2byl8ac",
|
||||
name: "cat",
|
||||
image: "https://image.senaai.tech/images/Cat.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_cat_d077f244.mp3",
|
||||
},
|
||||
{
|
||||
id: "yb4z60c",
|
||||
name: "fish",
|
||||
image: "https://image.senaai.tech/images/Clownfish.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_fish_83e4a96a.mp3",
|
||||
},
|
||||
{
|
||||
id: "7npcqv0",
|
||||
name: "bird",
|
||||
image: "https://image.senaai.tech/images/Bird31.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
|
||||
},
|
||||
{
|
||||
id: "gjkmg09",
|
||||
name: "dog",
|
||||
image: "https://image.senaai.tech/images/dog7.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_dog_06d80eb0.mp3",
|
||||
},
|
||||
{
|
||||
id: "7npcqv0",
|
||||
name: "bird",
|
||||
image: "https://image.senaai.tech/images/Bird31.png",
|
||||
audio: "https://audio.senaai.tech/audio/Sena_Voice1_bird_abaecf8c.mp3",
|
||||
},
|
||||
];
|
||||
tdv_sdk.pageCardConfig = [1, 2, 3, 4, 5, 6];
|
||||
tdv_sdk.getImageStyle = function (name) {
|
||||
for (let i in tdv_sdk.style) {
|
||||
if (tdv_sdk.style[i].name == name) {
|
||||
return tdv_sdk.style[i].image;
|
||||
}
|
||||
}
|
||||
return "";
|
||||
};
|
||||
tdv_sdk.pageCurrent = 0;
|
||||
tdv_sdk.totalPage = 0;
|
||||
tdv_sdk.currentPageList = [];
|
||||
tdv_sdk.getTotalPage = function () {
|
||||
return tdv_sdk.totalPage;
|
||||
};
|
||||
tdv_sdk.getCurrentPage = function () {
|
||||
return tdv_sdk.pageCurrent;
|
||||
};
|
||||
tdv_sdk.nextPage = function () {
|
||||
if (tdv_sdk.pageCurrent < tdv_sdk.totalPage) {
|
||||
tdv_sdk.pageCurrent++;
|
||||
tdv_sdk.updateMaxCardByPage();
|
||||
tdv_sdk.getPostionInPage();
|
||||
}
|
||||
};
|
||||
|
||||
tdv_sdk.prePage = function () {
|
||||
if (tdv_sdk.pageCurrent > 0) {
|
||||
tdv_sdk.pageCurrent--;
|
||||
tdv_sdk.updateMaxCardByPage();
|
||||
tdv_sdk.getPostionInPage();
|
||||
}
|
||||
};
|
||||
|
||||
tdv_sdk.getCurrentPageListInfo_getTotal = function () {
|
||||
console.log(tdv_sdk.currentPageList.length - 1);
|
||||
return tdv_sdk.currentPageList.length - 1;
|
||||
};
|
||||
tdv_sdk.getCurrentPageListInfo_getByIndex = function (index, attr) {
|
||||
return tdv_sdk.currentPageList[index][attr];
|
||||
};
|
||||
|
||||
tdv_sdk.start = function () {
|
||||
tdv_sdk.pageInfo = [];
|
||||
let list = tdv_sdk.list;
|
||||
let index = 0;
|
||||
|
||||
for (let i = 0; i < tdv_sdk.pageCardConfig.length; i++) {
|
||||
let count = tdv_sdk.pageCardConfig[i];
|
||||
let startIdx = index;
|
||||
let endIdx = Math.min(index + count, list.length);
|
||||
let cardList = [];
|
||||
|
||||
for (let j = startIdx; j < endIdx; j++) {
|
||||
const _obj = {
|
||||
id: list[j].id,
|
||||
name: list[j].name,
|
||||
image: list[j].image,
|
||||
audio: list[j].audio,
|
||||
value: list[j].value,
|
||||
x: 0,
|
||||
y: 0,
|
||||
};
|
||||
cardList.push(_obj);
|
||||
}
|
||||
|
||||
tdv_sdk.pageInfo.push({
|
||||
index: i,
|
||||
totalCardInpage: cardList.length,
|
||||
cardList: cardList,
|
||||
});
|
||||
|
||||
index = endIdx;
|
||||
if (endIdx >= list.length) break; // dừng nếu hết dữ liệu
|
||||
}
|
||||
|
||||
tdv_sdk.totalPage = tdv_sdk.pageInfo.length - 1;
|
||||
tdv_sdk.pageCurrent = 0;
|
||||
tdv_sdk.updateMaxCardByPage();
|
||||
tdv_sdk.getPostionInPage();
|
||||
};
|
||||
|
||||
tdv_sdk.getPostionInPage = function () {
|
||||
const _currentPage = tdv_sdk.pageInfo[tdv_sdk.pageCurrent];
|
||||
|
||||
const max_width = 1200,
|
||||
max_height = 1200,
|
||||
margin_x = 80,
|
||||
margin_y = 80,
|
||||
card_width = 300,
|
||||
card_height = 300;
|
||||
|
||||
const totalCards = _currentPage.totalCardInpage;
|
||||
|
||||
// --- ĐIỂM CẦN SỬA ---
|
||||
// Mặc định là 3 cột (cho trường hợp 3, 5, 6 card)
|
||||
let max_col = 3;
|
||||
|
||||
// Nếu có đúng 4 card -> Ép xuống thành 2 cột để ra dạng Grid 2x2
|
||||
if (totalCards === 4) {
|
||||
max_col = 2;
|
||||
}
|
||||
// --------------------
|
||||
|
||||
const num_rows = Math.ceil(totalCards / max_col);
|
||||
|
||||
// Tính chiều cao tổng thể để căn giữa dọc
|
||||
const total_block_height = num_rows * card_height + (num_rows - 1) * margin_y;
|
||||
const start_y = (max_height - total_block_height) / 2 + card_height / 2;
|
||||
|
||||
_currentPage.cardList.forEach((card, index) => {
|
||||
const row_idx = Math.floor(index / max_col);
|
||||
const col_idx = index % max_col;
|
||||
|
||||
// Tính số item trong hàng hiện tại để căn giữa ngang
|
||||
let items_in_current_row;
|
||||
|
||||
// Logic xác định số lượng card trong hàng hiện tại
|
||||
// Nếu là hàng cuối cùng
|
||||
if (row_idx === num_rows - 1) {
|
||||
// Lấy số dư. Nếu chia hết (dư 0) thì tức là hàng đó đầy (bằng max_col)
|
||||
let remainder = totalCards % max_col;
|
||||
items_in_current_row = remainder === 0 ? max_col : remainder;
|
||||
} else {
|
||||
// Các hàng bên trên luôn đầy
|
||||
items_in_current_row = max_col;
|
||||
}
|
||||
|
||||
const current_row_width =
|
||||
items_in_current_row * card_width + (items_in_current_row - 1) * margin_x;
|
||||
const start_x = (max_width - current_row_width) / 2 + card_width / 2;
|
||||
|
||||
card.x = start_x + col_idx * (card_width + margin_x);
|
||||
card.y = start_y + row_idx * (card_height + margin_y);
|
||||
});
|
||||
|
||||
tdv_sdk.currentPageList = _currentPage.cardList;
|
||||
};
|
||||
// get card info
|
||||
tdv_sdk.getTotalCardInpage = function () {
|
||||
return tdv_sdk.list.length;
|
||||
};
|
||||
tdv_sdk.getText = function (index) {
|
||||
return tdv_sdk.list[index].name;
|
||||
};
|
||||
tdv_sdk.getId = function (index) {
|
||||
return tdv_sdk.list[index].id;
|
||||
};
|
||||
tdv_sdk.getAnswers = function (index) {
|
||||
return tdv_sdk.answers[index];
|
||||
};
|
||||
tdv_sdk.playSound = function (index) {
|
||||
console.log("play sound : ", index);
|
||||
const _audio = tdv_sdk.currentPageList[index].audio;
|
||||
console.log("audio : ", _audio);
|
||||
if (_audio == "") return;
|
||||
if (window["audioPlayer"]) {
|
||||
window["audioPlayer"].pause();
|
||||
window["audioPlayer"].src = _audio;
|
||||
window["audioPlayer"].play();
|
||||
} else {
|
||||
window["audioPlayer"] = new Audio(_audio);
|
||||
window["audioPlayer"].play();
|
||||
}
|
||||
};
|
||||
|
||||
tdv_sdk.setMaxCardInPage = function (num) {
|
||||
tdv_sdk.maxCardInPage = num;
|
||||
};
|
||||
|
||||
tdv_sdk.updateMaxCardByPage = function () {
|
||||
// Nếu có cấu hình cho trang hiện tại thì lấy, không thì giữ nguyên giá trị trước đó
|
||||
const index = tdv_sdk.pageCurrent;
|
||||
if (tdv_sdk.pageCardConfig && tdv_sdk.pageCardConfig[index] !== undefined) {
|
||||
tdv_sdk.maxCardInPage = tdv_sdk.pageCardConfig[index];
|
||||
}
|
||||
};
|
||||
// Hàm kiểm tra xem có phải trang cuối cùng không
|
||||
tdv_sdk.isLastPage = function () {
|
||||
if (tdv_sdk.pageCurrent >= tdv_sdk.totalPage) {
|
||||
return 1; // Đúng là trang cuối
|
||||
}
|
||||
return 0; // Chưa phải trang cuối
|
||||
};
|
||||
Reference in New Issue
Block a user