永发信息网

ASP 实现图片自由拖动

答案:4  悬赏:40  手机版
解决时间 2021-01-27 11:31
ASP 实现图片自由拖动
最佳答案
代码如下:





全部回答
用javascript
去研究一下WEB2.0 这不是ASP的功能
对客观存在的实现非常简单。
将图片定义一个绝对的层定位。比如写在一个绝对关系的层上也可以。
在IE和NS下用window.event进行事件收集,收集到鼠标按下事件,并在事件中判断中否该位置在图片上。如果不是,则不进行任何处理。如果是记录下当前鼠标位置。
设置鼠标移动事件。用图层的位置跟参鼠标移动。也就是说鼠标移动到哪,层跟随到哪儿。
设置鼠标放下事件,取得当前的鼠标位置后,将层设置到该位置就可以了!这个层的位置不是等于鼠标的位置。而是相对于鼠标的位置,也就是其运动路径才与鼠标按下时运动相同。
三个事件的源码如下:
function checkFocus(x,y){
stalkerX = document.P_02.pageX;
stalkerY = document.P_02.pageY;
stalkerWidth = document.P_02.clip.width;
stalkerHeight = docuemnt.P_02.clip.height;

if((x > stalkerX && x < (stalkerX+stalkerWidth)) && (y > stalkerY && y < (stalkerY+stalkerHeight))) return true;
else return false;
}//该函数是为NS检查焦点用的!
function grabIt(e){
if(NS) {//NS浏览器
window.captureEvents(Event.MOUSEMOVE);//捕获事件源;
if(checkFocus(e.pageX,e.pageY)){
whichIt = document.P_02;
StalkerTouchedX = e.pageX-document.P_02.pageX;
StalkerTouchedY = e.pageY-document.P_02.pageY;
}
}
else{//如果是IE浏览器
whichIt = event.srcElement;
while(whichIt.id.indexOf("P_02")== -1){
whichIt = whichIt.parentElement;
if(whichIt == null) return true;
}//遍历事件源节点的父节点,查找定位事件源为P_02;也就是说只要是P_02内的所有元素都可引起

whichIt.parentElement.style.pixelTop = whichIt.parentElement.offsetTop;
whichIt.parentElement.style.pixelLeft = whichIt.parentElement.offsetLeft;

currentX = (event.clientX + document.body.scrollLeft);
currentY = (event.clientY + document.body.scrollTop);
}
return true;
}//该函数用以记录按下MOUSE时的位置!

function moveIt(e) {
if (whichIt == null) { return false; }
if(NS) {
whichIt.parentElement.moveTo(e.pageX-StalkerTouchedX,e.pageY-StalkerTouchedY);
if(whichIt.parentElement.left < 0+self.pageXOffset) whichIt.parentElement.left = 0+self.pageXOffset;
if(whichIt.parentElement.top < 0+self.pageYOffset) whichIt.parentElement.top = 0+self.pageYOffset;
if( (whichIt.parentElement.left + whichIt.parentElement.clip.width) >= (window.innerWidth+self.pageXOffset-17)) whichIt.parentElement.left = ((window.innerWidth+self.pageXOffset)-whichIt.parentElement.clip.width)-17;
if( (whichIt.parentElement.top + whichIt.parentElement.clip.height) >= (window.innerHeight+self.pageYOffset-17)) whichIt.parentElement.top = ((window.innerHeight+self.pageYOffset)-whichIt.parentElement.clip.height)-17;
return false;
}
else {
newX = (event.clientX + document.body.scrollLeft);
newY = (event.clientY + document.body.scrollTop);
distanceX = (newX - currentX); distanceY = (newY - currentY);
currentX = newX; currentY = newY;
whichIt.parentElement.style.pixelLeft += distanceX;
whichIt.parentElement.style.pixelTop += distanceY;
if(whichIt.parentElement.style.pixelTop < document.body.scrollTop) whichIt.parentElement.style.pixelTop = document.body.scrollTop;
if(whichIt.parentElement.style.pixelLeft < document.body.scrollLeft) whichIt.parentElement.style.pixelLeft = document.body.scrollLeft;
if(whichIt.parentElement.style.pixelLeft > (document.body.offsetWidth - document.body.scrollLeft - whichIt.parentElement.style.pixelWidth - 20)) whichIt.parentElement.style.pixelLeft = document.body.offsetWidth - whichIt.parentElement.style.pixelWidth - 20;
if(whichIt.parentElement.style.pixelTop > document.body.offsetHeight + document.body.scrollTop - whichIt.parentElement.style.pixelHeight - 5) whichIt.parentElement.style.pixelTop = document.body.offsetHeight + document.body.scrollTop - whichIt.parentElement.style.pixelHeight - 5;
event.returnValue = false;
}
return false;
}//记录鼠标移动轨迹

function dropIt() {
whichIt = null;
if(NS) window.releaseEvents (Event.MOUSEMOVE);
return true;
}//释放鼠标的方法
当然,这几个事件的加入方法如下:
注:NS为测试出的浏览类型。NS=document.layer?1:0,先对浏览器进行了测试。
if(NS) {
window.captureEvents(Event.MOUSEUP|Event.MOUSEDOWN);
window.onmousedown = grabIt;
window.onmousemove = moveIt;
window.onmouseup = dropIt;
}
else {
document.onmousedown = grabIt;
document.onmousemove = moveIt;
document.onmouseup = dropIt;
}
else中为IE的加入方法。这样你可以试一下!这个程序我自己写后经过IE5+,和NS的测试的。如果有什么不对的地方可以反馈给我! p_02是拖动图片层,而p_02的父层就是图片的父层,运动是依靠的父图层,焦点计算的是P_02层。这样,如果父层中有其他元素时也可以跟前运动。我作的是一个视窗运动效果,P_02层相当于标题栏的,而其父层中还有其他的内容。这样的效果就相当于你拖动标题栏时整个视窗在运动。如果你是不一个图片,可以考虑不使用父层,自己修改一下,会更个性的!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求救!兔子吃了糯米怎么办
cf踢腿被和谐补偿是什么 cf踢腿狙补偿在哪里
朗浄的意思是什么啊?知道的请说下!
科目二许多学员都挂在“倒车入库”这一项,压
我原来注册的激动网现在怎么没了?
家里的一只羊吃喝都没问题,就是前蹄软而无力
六騑的意思是什么啊?知道的请说下!
金地造型NO.1在什么地方啊,我要过去处理事情
雪地靴沾上了白花油,怎么洗掉啊?
2017保险费改是上涨还是下降
3个月的工资买一块手表理性吗
vivox6A支持HML功能吗
赵州桥是我国历史上最著名的桥,陈师傅骑一辆
加油门机油灯就亮坏了什么
男朋友偷了我的钱,我找不到他了,报警的话,
推荐资讯
有个人突然问你: 不知道自己最好的朋友是谁了
有适合53岁的网贷吗
邵阳市车家塘老水库地址在什么地方,想过去办
证明:a²+b²+3≥ab+√3*(a+b)
7.2米高栏货车二手车多少钱
莲塘一中和莲塘二中的高中哪个好?
中石化嘉兴第五(鸿兴)地址在什么地方,我要处
三不宜的意思是什么啊?知道的请说下!
代言Muscle Meds的Carnivor分离牛肉蛋白增肌
汽车陷入泥地怎么办?
绿珠加油站怎么去啊,我要去那办事
良发专业剪发地址在什么地方,想过去办事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?