用户定制应用顺序

经常会有这样的个性化需求,用户希望可以在页面上按自己的偏好拖放移动应用图标,而且还能保存,下次访问该页面时应用图标就是按自己上次保存的顺序展示的。

拖放是一种常见的特性,即抓取对象后移动到另一个位置后放下。在 HTML5 中,拖放是标准的一部分,任何元素只要将draggable属性设置为"true"就能够拖放。

前端JS从后端获取到可显示应用列表和用户定制的应用显示顺序,在例程中直接写在json变量里了。用户对图标进行一顿拖放后,点击"显示app顺序"按钮,页面弹窗显示当前app顺序,JS可以把app顺序传到后端,更新用户定制的app顺序,这样可以满足用户对图标显示顺序的个性化要求。

html 复制代码
<!DOCTYPE html>
<html>
<button name="showorder" id="showorder" style="float: right;">当前app顺序</button>
<ul id="applist">
</ul>
<script src="jquery-3.6.1.min.js"></script>
<script>

var srcdiv = null;

var applist=[
{"appid":"app1","appdesc":"百度","appurl":"https://www.baidu.com","applogo":"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"},
{"appid":"app2","appdesc":"CSDN","appurl":"https://www.csdn.net","applogo":"https://img-home.csdnimg.cn/images/20201124032511.png"},
{"appid":"app3","appdesc":"中国日报网","appurl":"https://www.chinadaily.com.cn/","applogo":"https://www.chinadaily.com.cn/image_e/2016/logo.jpg"}
];

var apporder=["app3","app2","app1"];

//$.get(url,(obj)=>{applist=obj.applist,apporder=obj.apporder},"json")

function allowDrop(ev) { ev.preventDefault(); }

function drag(ev,divdom) { srcdiv=divdom; }

function drop(ev,divdom) { 
	ev.preventDefault();
	if (srcdiv != divdom) { document.getElementById("applist").insertBefore(srcdiv, divdom); }
}

$(document).ready(()=>{
	apporder.forEach(itm=>{
		let item=applist.find(app=>(app.appid==itm));
		$("#applist").append(`<li οndrοp="drop(event,this)" οndragοver="allowDrop(event)" draggable="true" οndragstart="drag(event, this)"><div id="${item.appid}" ><a href="${item.appurl}" target="_blank"><img src="${item.applogo}"><p>${item.appdesc}</p></a></div></li>`)
		})

	$("#showorder").click(()=>{ 
		let appids=[];
		$("#applist li div").each(function(index) { appids.push($(this).attr("id")); });
		alert(appids)
		//$.post(url,{"neworder":appids})
		})

})

</script>
</html>
相关推荐
夜焱辰7 小时前
浏览器端 Agent 的文件版本管理:不用 Git,基于 OPFS + SQLite 自己造了一个
前端·人工智能
梦想的颜色7 小时前
TypeScript 完全指南(下):从类型体操到生产级配置
前端·javascript·typescript
Hi~晴天大圣9 小时前
npm使用介绍
前端·npm·node.js
888CC++9 小时前
如何在 C 语言中进行程序调试?
前端·javascript·算法
喵个咪10 小时前
基于 Taro 的 Headless CMS 多端前端架构:技术解析与二次开发导引
前端·react.js·taro
狂炫冰美式10 小时前
你还在古法PPT吗,试试HTML呢?免费编辑导出工具给 xdm 放这了
前端·后端·github
万少10 小时前
未来组织的分水岭不是员工数量,而是人才密度
前端·后端·面试
任磊abc10 小时前
nextjs16配置eslint+prettier
前端·eslint·nextjs·prettier
x***r15111 小时前
Another-Redis-Desktop-Manager.1.3.7安装步骤详解(附Redis可视化连接与Key管理教程)
前端·bootstrap·html
Captaincc11 小时前
你真的知道自己把 AI 用在了哪里吗?这是 Vibe Usage 想回答的问题
前端·vibecoding