Skip to content

Commit 0c5a39a

Browse files
authored
fix mobile drag
1 parent d74f6e5 commit 0c5a39a

File tree

2 files changed

+41
-11
lines changed

2 files changed

+41
-11
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Pure Javascript ChatGPT demo based on OpenAI API
2222

2323
## Demo
2424

25-
[在线预览](https://xqdoo00o.github.io/chatgpt-web/)使用需配置自定义API key和自定义接口
25+
[在线预览](https://xqdoo00o.github.io/chatgpt-web/)使用需配置OpenAI接口和API密钥
2626

2727
## 使用方法
2828
### **注意:部署反代接口请注意OpenAI的[支持地区](https://platform.openai.com/docs/supported-countries),部署在不支持地区的服务器可能导致封号!最好配置https,公网以http方式明文传输API key非常不安全!**
@@ -36,7 +36,7 @@ ___
3636
- 不可正常访问`api.openai.com`,填写其反代地址(可使用[Cloudflare Worker](https://github.com/xqdoo00o/openai-proxy)等反代),注意:反代接口响应需添加跨域Header `Access-Control-Allow-Origin`
3737
- **同时部署HTML和OpenAI反代接口**
3838

39-
**注意:服务器需正常访问`api.openai.com`网页不用设置自定义接口了**
39+
**注意:服务器需正常访问`api.openai.com`网页不用设置OpenAI接口了**
4040
- 使用nginx,示例配置如下
4141

4242
```
@@ -103,7 +103,7 @@ ___
103103
104104
- 可选OpenAI接口地址,使用nginx或caddy部署反代后可以不设置。
105105
106-
- 可选API密钥,默认不设置,**如需网页设置自定义API key使用,反代接口最好配置https,公网以http方式明文传输API key极易被中间人截获。**
106+
- 可选API密钥,默认不设置,**如需网页设置自定义API密钥使用,反代接口最好配置https,公网以http方式明文传输API key极易被中间人截获。**
107107
108108
- 可选用户头像,可修改为任意图片地址。
109109

index.html

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,15 +2310,15 @@
23102310
<script>
23112311
const isMobile = navigator.userAgent.match(/iPhone|iPad|iPod|Android|BlackBerry|webOS/);
23122312
if (isMobile) {
2313-
const script = document.createElement('script');
2313+
const script = document.createElement("script");
23142314
script.src = "https://cdn.jsdelivr.net/gh/timruffles/[email protected]/release/index.min.js";
23152315
script.defer = true;
23162316
script.onload = () => {
23172317
MobileDragDrop.polyfill();
23182318
}
23192319
document.body.appendChild(script);
2320-
const link = document.createElement('link');
2321-
link.rel = 'stylesheet';
2320+
const link = document.createElement("link");
2321+
link.rel = "stylesheet";
23222322
link.href = "https://cdn.jsdelivr.net/gh/timruffles/[email protected]/release/default.css";
23232323
document.body.appendChild(link);
23242324
}
@@ -3119,8 +3119,8 @@
31193119
}
31203120
const formatDate = date => {
31213121
const year = date.getFullYear();
3122-
const month = (date.getMonth() + 1).toString().padStart(2, '0');
3123-
const day = date.getDate().toString().padStart(2, '0');
3122+
const month = (date.getMonth() + 1).toString().padStart(2, "0");
3123+
const day = date.getDate().toString().padStart(2, "0");
31243124
return `${year}-${month}-${day}`;
31253125
}
31263126
const checkBill = async () => {
@@ -3477,6 +3477,34 @@
34773477
let activeChatEle;
34783478
let operateChatIdx, operateFolderIdx;
34793479
let dragLi, dragType, dragIdx;
3480+
let mobileDragOut;
3481+
const mobileDragStartEV = function (ev) {
3482+
if (mobileDragOut !== void 0) {
3483+
clearTimeout(mobileDragOut);
3484+
mobileDragOut = void 0;
3485+
}
3486+
mobileDragOut = setTimeout(() => {
3487+
this.setAttribute("draggable", "true");
3488+
this.dispatchEvent(ev);
3489+
}, 200);
3490+
};
3491+
if (isMobile) {
3492+
let stopDragOut = () => {
3493+
if (mobileDragOut !== void 0) {
3494+
clearTimeout(mobileDragOut);
3495+
mobileDragOut = void 0;
3496+
}
3497+
};
3498+
let stopDrag = () => {
3499+
stopDragOut();
3500+
document.querySelectorAll("[draggable=true]").forEach(ele => {
3501+
ele.setAttribute("draggable", "false");
3502+
})
3503+
};
3504+
document.body.addEventListener("touchmove", stopDragOut);
3505+
document.body.addEventListener("touchend", stopDrag);
3506+
document.body.addEventListener("touchcancel", stopDrag);
3507+
};
34803508
const delDragIdx = () => {
34813509
let chatIdx = chatIdxs.indexOf(dragIdx);
34823510
if (chatIdx !== -1) {
@@ -3680,7 +3708,8 @@
36803708
let folder = folderData[idx];
36813709
let folderEle = document.createElement("div");
36823710
folderEle.className = "folderLi";
3683-
folderEle.setAttribute("draggable", "true");
3711+
if (!isMobile) folderEle.setAttribute("draggable", "true");
3712+
else folderEle.ontouchstart = mobileDragStartEV;
36843713
let headEle = document.createElement("div");
36853714
headEle.className = "headLi";
36863715
headEle.innerHTML = `<svg width="24" height="24"><use xlink:href="#expandFolderIcon" /></svg>
@@ -3718,12 +3747,13 @@
37183747
if (first) {chatPreview = first.content.slice(0, 30)}
37193748
}
37203749
chatEle.children[1].children[1].textContent = chatPreview;
3721-
}
3750+
};
37223751
const chatEleAdd = (idx, appendChat = true) => {
37233752
let chat = chatsData[idx];
37243753
let chatEle = document.createElement("div");
37253754
chatEle.className = "chatLi";
3726-
chatEle.setAttribute("draggable", "true");
3755+
if (!isMobile) chatEle.setAttribute("draggable", "true");
3756+
else chatEle.ontouchstart = mobileDragStartEV;
37273757
chatEle.ondragstart = chatDragStartEv;
37283758
chatEle.innerHTML = `<svg width="24" height="24"><use xlink:href="#chatIcon" /></svg>
37293759
<div class="chatInfo">

0 commit comments

Comments
 (0)