js可拖动自动排序的标签标记特效代码

所属分类: 网页特效-筛选&排序    2023-12-07 11:56:17

js可拖动自动排序的标签标记特效代码 ie兼容6
 查看演示  登录后下载 温馨提示
登录会员即可享受免费下载
 我要建站

js可拖动自动排序的标签标记特效代码(共3个文件)

    • index.html

使用方法

const container = document.getElementById('container');

const fake = document.getElementById('fake');

const margin = 10;

let divs = ['苦力吧','苦力娃','素材下载','网页素材','html模板','网址导航', '源码工具'].map(txt => {
	const d = document.createElement('div');
	d.classList.add('block');
	d.classList.add(txt);
	Object.assign(d.style,{
		margin: margin + 'px',
	})
	d.innerHTML = txt;
	container.appendChild(d);
	return d;
});

divs.forEach((d,startidx) => {
	d.addEventListener('mousedown',()=>{
		
		const x0 = container.getBoundingClientRect().x;
		const y0 = container.getBoundingClientRect().y;
		
		const others = divs.filter(d2 => d !== d2);
		const positions = others.map(d =>  d.getBoundingClientRect().x);
		const widths = others.map(d =>  d.getBoundingClientRect().width);
		
		let moved = false; 
		
		let finalpos = d.getBoundingClientRect().x;
		let finalidx = startidx;
		
		const selfClone = d.cloneNode(true);
		const clones = [];
		
		function movedCBs(){
				Object.assign(selfClone.style,{
					left: d.getBoundingClientRect().x + 'px',
					top: d.getBoundingClientRect().y + 'px',
					position: 'fixed',
					margin: 0,
					'z-index': 2
				})
			  fake.appendChild(selfClone);
			  container.classList.add('hidden');
			
			others.forEach((d,i) => {
				const position = positions[i];
				const clone = d.cloneNode(true);
				Object.assign(clone.style,{
					position: 'fixed',
					left: position + 'px',
					top: y0 + margin + 'px',
					transition: '.2s',
					margin: 0,
				})
				fake.appendChild(clone);
				clones.push(clone);
			});
		}
	
		function transitionEnd(){
			fake.innerHTML = '';
			container.classList.remove('hidden');
			
			d.parentNode.removeChild(d);
			console.log(finalidx)
			container.insertBefore(d, container.children[finalidx]);
			divs = Array.from(container.children);	
		}
	
		function move(e){
			
			if (!moved){
				movedCBs();
				moved = true;
			} 
			
			const posx = selfClone.getBoundingClientRect().x + e.movementX
			Object.assign(selfClone.style,{
				left: posx + 'px',
				top: selfClone.getBoundingClientRect().y + e.movementY + 'px'
			})
			
			let pos = x0 + margin;
			let counter;
			let spliced = false;
			for (counter=0; counter<widths.length; counter++){
				const nextpos = pos + widths[counter] + margin*2;
				if (!spliced && Math.abs(nextpos - posx) >= Math.abs(pos - posx)){
					spliced = true;
					finalpos = pos;
					finalidx = counter;
				}
				
				Object.assign(clones[counter].style,{
					left: pos + (spliced ? selfClone.getBoundingClientRect().width + margin*2 : 0) + 'px'
				})
			
				pos = nextpos;
			}
			if (!spliced){
				 finalpos = pos;
				 finalidx = counter;
			}
		}
		
		document.addEventListener('mousemove', move );
		document.addEventListener('mouseup', ()=>{
			
			document.removeEventListener('mousemove',move);
			if (!moved) return;
			
			Object.assign(selfClone.style,{
				transition: '.2s'
			});
			setTimeout(()=>{
				Object.assign(selfClone.style,{
					left: finalpos + 'px',
					top: y0 + margin + 'px'
				});
			},0)
			setTimeout(transitionEnd, 200)
		},{once:true})
		
	})
	
})

站长提示:
1. 苦力吧素材官方QQ群:950875342
2. 平台上所有素材资源,需注册登录会员方能正常下载。
3. 会员用户积极反馈网站、素材资源BUG或错误问题,每次奖励2K币
4. PHP源码类素材,如需协助安装调试,或你有二次开发需求,可联系苦力吧客服。
5. 付费素材资源,需充值后方能下载,如有任何疑问可直接联系苦力吧客服
相关资源 / 筛选&排序

jquery鼠标双击平滑的移动到任何指定位置自动排序特效

一个鼠标双击动画平滑移动特效插件,鼠标双击需要移动的DIV可自定义移动到第一位(顶部)或前一个位置。
  筛选&排序
 2245  0

jquery基于layui制作产品分类多条件筛选代码

一款layui多条件筛选特效,支持多选、input输入等搜索查询,非常实用!
  筛选&排序
 9242  0

table表单数据处理插件DataTables

一款响应式数据处理插件,带分页、排序,可设置显示数据条数及即时搜索查询功能。
  筛选&排序
 5287  0

原生js在线佩戴/试戴眼镜筛选代码

一款在线眼镜试戴系统,可根据脸型在线筛选头像,功能非常强大!
  筛选&排序
 2285  0

评论数(0) 回复有机会获得K币 用户协议

^_^ 还没有人评论,快来抢个沙发!
😀
  • 😀
  • 😊
  • 😂
  • 😍
  • 😑
  • 😷
  • 😵
  • 😛
  • 😣
  • 😱
  • 😋
  • 😎
  • 😵
  • 😕
  • 😶
  • 😚
  • 😜
  • 😭
发表评论