跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 综合服务 > 社群媒体 > 用js仿探探拖拽卡片的效果、飞卡片的效果,感觉挺酷,高级前端程序员必会

用js仿探探拖拽卡片的效果、飞卡片的效果,感觉挺酷,高级前端程序员必会

时间:2024-04-07 07:55:41 来源:网络cs 作者:璐璐 栏目:社群媒体 阅读:

标签: 效果  卡片  高级  程序  感觉 

var obj = boxStack[i];

obj.style.left=left+‘px’;

obj.style.top=top+‘px’;

obj.style.marginLeft=marginLeft-i*6+‘px’;

obj.style.marginTop=marginTop-i*6+‘px’;

obj.style.zIndex=zIndex+i;

obj.style.width=(width+i*12)+‘px’;

obj.style.height=height+‘px’;

//obj.children[0].style.width=(width+i*12)+‘px’;

//obj.children[0].style.height=height+‘px’;

//每个卡片设置不同的颜色

switch (obj.id) {

case ‘card1’:

obj.style.background = ‘aliceblue’;

break;

case ‘card2’:

obj.style.background = ‘skyblue’;

break;

case ‘card3’:

obj.style.background = ‘powderblue’;

break;

case ‘card4’:

obj.style.background = ‘steelblue’;

break;

}

}

}

//拖动卡片的事件函数

function tran(e){

var e = e || window.event;

var target = e.target || e.srcElement;

console.log(target.id);

if(target.id){

//拖动当前的卡片

move_tran(target);

}

}

//点击box的事件函数

function tranBox(e){

var e = e || window.event;

var target = e.target || e.srcElement;

if(target.id){

if(target.id===‘div_box’){//点击div_box从最上面开始飞

move_tran(boxStack[boxStack.length-1]);

}

}

}

var moveFlag=false;//正在移动表示,有卡片正在移动,move 函数将不会被调用

function move_tran(obj,direction,step){

if(moveFlag) return ;//表示有卡片正在移动,move 函数将不会被调用

if(obj.timer) return ;//避免重复点击

moveFlag=true;//设置当前正在移动

step=step||0;

var cb = (function (){//回调函数

var speed=5;

var screenTotal=0;

var distance = 0;

var endFlag=false;

function init(){//处理初始步距

if(direction==‘top’||direction==‘bottom’){

speed=10;

screenTotal = window.screen.availHeight;

distance = Math.ceil((top+step)/screenTotal*100);

}else{

screenTotal = window.screen.availWidth;

distance = Math.ceil((left+step)/screenTotal*100);

}

}

init();

return function(){

//针对上下左右有不同的设置

if(direction==‘left’){

distance -= speed;

dire=‘left’;

if(distance<=1){

endFlag=true;

}

}else if(direction==‘top’){

distance -= speed;

dire=‘top’;

if(distance<=1){

endFlag=true;

}

}else if(direction==‘bottom’){

distance += speed;

dire=‘top’;

if(distance>=90){

endFlag=true;

}

}else{

distance += speed;

dire=‘left’;

//超过一定范围就调整卡片

if(distance>=90){

endFlag=true;

}

}

if(endFlag){

//清除定时器

clearInterval(obj.timer);

obj.timer=null;

//把当前元素 从盒子队列中移动到最前面

moveFlag=false;

var index = boxStack.findIndex(function(item){

return obj.id==item.id;

})

var cur = boxStack.splice(index,1);

boxStack.unshift(cur[0]);//添加到队列最前面

setTimeout(function(){

reset();//重新部署盒子

},50)//设置重写设置盒子样式的延时,看起来更舒服

return ;

}

console.log(“distance===”,distance)

//设置left或者top作移动

obj.style[dire]=distance +‘%’;

}

})();

obj.timer = setInterval(cb,35);

}

/* 鼠标拖动 */

/*

分析:

获取鼠标实时移动的坐标;m_move_x,m_move_y

鼠标按下时的坐标;m_down_x,m_down_y

div的坐标;dx,dy

div的新坐标;ndx,ndy

最大边界maxX,maxY

鼠标相对位移 nx,ny

*/

var isDown = false;//记录鼠标状态

var recover = false;

var move_div;//要操作的div对象

var m_move_x,m_move_y,m_down_x,m_down_y,dx,dy,ndx,ndy,maxX,maxY,nx=0,ny=0;

//鼠标按下

function drag(e){

var e = e || event;

move_div = this;

isDown = true;

//获取鼠标按下时坐标

m_down_x = e.clientX;

m_down_y = e.clientY;

//实时更新div的坐标

dx = move_div.offsetLeft;

dy = move_div.offsetTop;

}

//鼠标移动

document.οnmοusemοve=function move(e){

var e = e || event;

//鼠标按下时移动才触发

if(isDown && move_div){

//获取鼠标移动实时坐标

m_move_x = e.clientX;

m_move_y = e.clientY;

nx = m_move_x-m_down_x;

ny = m_move_y-m_down_y;

if(Math.abs(nx)>=200){

move_tran(move_div,nx>0?‘right’:‘left’,nx);

isDown = false;

move_div= null;

return ;

}else if(Math.abs(ny)>=100){

move_tran(move_div,ny>0?‘bottom’:‘top’,ny);

isDown = false;

move_div= null;

return ;

}

var id = move_div.id.substr(4);

ndx = dx+nx-(id-1)*4;

ndy = dy+ny-(id-1)*4;

//设置拖动的边界

maxX = window.screen.availWidth-20-move_div.offsetWidth;

maxY = window.screen.availHeight-110-move_div.offsetHeight;

if(ndx<=0){

ndx=1;

}

if(ndy<=0){

ndy=1;

}

if(ndx>=maxX){

ndx=maxX;

}

if(ndy>=maxY){

ndy=maxY;

}

//把新div坐标值赋给div对象

move_div.style.left = ndx+“px”;

move_div.style.top = ndy+“px”;

}

}

//鼠标释放

document.οnmοuseup=function up(e){

var e = e || event;

//获取鼠标移动实时坐标

m_move_x = e.clientX;

m_move_y = e.clientY;

nx = m_move_x-m_down_x;

ny = m_move_y-m_down_y;

if(nx<300){

reset();

}

isDown = false;

move_div= null;

}

//初始化

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?

Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
[外链图片转存中…(img-jm2CVYuN-1711871064007)]

CodeChina开源项目:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

本文链接:https://www.kjpai.cn/news/2024-04-07/155004.html,文章来源:网络cs,作者:璐璐,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论