|
function confirmSelectFile(accept = "all") { |
|
const div = document.createElement("div"); |
|
div.innerHTML = `<div style="margin-bottom:10px;padding:8px;">Do you allow application to access phone storage?</div>`; |
|
div.setAttribute( |
|
"style", |
|
"width: 220px;display: flex;flex-direction: column;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%); background:white;box-shadow:0 0px 4px 4px #00000033;border-radius:5px;overflow:hidden;z-index:99;" |
|
); |
|
const input = document.createElement("input"); |
|
input.type = "file"; |
|
input.id = "btn"; |
|
if (accept !== "all") { |
|
if (accept !== "video" && accept !== "audio") throw new Error("不支持文件类型"); |
|
input.accept = `${accept}/*`; |
|
} |
|
|
|
input.onchange = async function (event) { |
|
div.remove(); |
|
uni.postMessage({ |
|
data: { |
|
action: "show-loading", |
|
}, |
|
}); |
|
const file = event.target.files[0]; |
|
if (file) { |
|
const reader = new FileReader(); |
|
reader.onload = function (e) { |
|
const fileContent = e.target.result; |
|
if (fileContent) { |
|
WebViewMessage.send( |
|
"request-file-system", |
|
JSON.stringify({ |
|
success: true, |
|
file: fileContent, |
|
}) |
|
); |
|
} else { |
|
WebViewMessage.send( |
|
"request-file-system", |
|
JSON.stringify({ |
|
success: false, |
|
file: null, |
|
}) |
|
); |
|
} |
|
uni.postMessage({ |
|
data: { |
|
action: "hide-loading", |
|
}, |
|
}); |
|
}; |
|
reader.readAsDataURL(file); |
|
} |
|
}; |
|
const buttonContianer = document.createElement("div"); |
|
buttonContianer.setAttribute("style", "display:flex;width:100%;"); |
|
const buttonStyle = |
|
"display: block;background:white;width:50%;padding: 5px;border: 0;height: 40px;border-top:1px solid #ccc;"; |
|
const confirmButton = document.createElement("button"); |
|
confirmButton.setAttribute("style", buttonStyle + "color: #007aff;"); |
|
confirmButton.innerText = "Confirm"; |
|
confirmButton.onclick = () => { |
|
input.click(); |
|
}; |
|
const cancelButton = document.createElement("button"); |
|
cancelButton.setAttribute("style", buttonStyle + "color: red;border-right:1px solid #ccc;"); |
|
cancelButton.innerText = "Cancel"; |
|
cancelButton.onclick = () => { |
|
div.remove(); |
|
}; |
|
buttonContianer.appendChild(cancelButton); |
|
buttonContianer.appendChild(confirmButton); |
|
div.appendChild(buttonContianer); |
|
document.querySelector("body").appendChild(div); |
|
} |
|
|
|
function userInput() { |
|
const div = document.createElement("div"); |
|
div.setAttribute( |
|
"style", |
|
"width: 240px;display: flex;flex-direction: column;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%); background:white;box-shadow:0 0px 4px 4px #00000033;border-radius:5px;overflow:hidden;z-index:99;" |
|
); |
|
const inputContianer = document.createElement("div"); |
|
inputContianer.setAttribute("style", "display:flex;width:100%;box-sizing:border-box;padding:10px 15px;"); |
|
const input = document.createElement("input"); |
|
input.type = "text"; |
|
input.setAttribute( |
|
"style", |
|
"display:block;width:100%;height:20px;border:1px solid #007aff;border-radius:2px;font-size:16px;height:28px;line-height:28px;padding:0 5px;" |
|
); |
|
inputContianer.appendChild(input); |
|
div.append(inputContianer); |
|
const buttonContianer = document.createElement("div"); |
|
buttonContianer.setAttribute("style", "display:flex;width:100%;"); |
|
const buttonStyle = |
|
"display: block;background:white;width:50%;padding: 5px;border: 0;height: 40px;border-top:1px solid #ccc;"; |
|
const confirmButton = document.createElement("button"); |
|
confirmButton.setAttribute("style", buttonStyle + "color: #007aff;"); |
|
confirmButton.innerText = "Confirm"; |
|
confirmButton.onclick = () => { |
|
const value = input.value; |
|
if (typeof window.godotUserInput === "function") { |
|
window.godotUserInput(value); |
|
} |
|
div.remove(); |
|
}; |
|
const cancelButton = document.createElement("button"); |
|
cancelButton.setAttribute("style", buttonStyle + "color: red;border-right:1px solid #ccc;"); |
|
cancelButton.innerText = "Cancel"; |
|
cancelButton.onclick = () => { |
|
div.remove(); |
|
}; |
|
buttonContianer.appendChild(cancelButton); |
|
buttonContianer.appendChild(confirmButton); |
|
div.appendChild(buttonContianer); |
|
document.querySelector("body").appendChild(div); |
|
} |
|
|
|
window.WebViewMessage = { |
|
actionList: {}, |
|
on(action, callback) { |
|
if (!this.actionList[action]) this.actionList[action] = []; |
|
this.actionList[action].push(callback); |
|
}, |
|
clear(action) { |
|
this.actionList[action] = []; |
|
}, |
|
send(action, data) { |
|
if (!this.actionList[action] instanceof Array) return; |
|
for (let func of this.actionList[action]) { |
|
func(data); |
|
} |
|
}, |
|
}; |
|
|
|
function adjustCanvas() { |
|
const canvas = document.getElementById("canvas"); |
|
const deviceWidth = window.innerWidth; |
|
const deviceHeight = window.innerHeight; |
|
const aspect = deviceWidth / deviceHeight; |
|
canvas.style = `width:${deviceWidth}px; height:${deviceHeight}px;`; |
|
if (aspect >= 9 / 16) { |
|
canvas.width = 1080; |
|
canvas.height = 1080 / aspect; |
|
} else { |
|
canvas.width = 1920 * aspect; |
|
canvas.height = 1920; |
|
} |
|
} |
|
|
|
window.addEventListener("load", adjustCanvas); |
|
window.addEventListener("resize", adjustCanvas); |
|
|