热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript滑移效果

这里说的滑移其实就是减速效果,能根据设定的坐标平面移动。效果代码:


这里说的滑移其实就是减速效果,能根据设定的坐标平面移动。 
效果

5a4a68210ae073c719f49061ddd667ad26a779cb
代码:
 

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns&#61;"http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv&#61;"Content-Type" content&#61;"text/html; charset&#61;gb2312" />
<title>滑移效果title>
<script type&#61;"text/Javascript">
var $ &#61; function (id) {
    
return "string" &#61;&#61; typeof id ? document.getElementById(id) : id;
}
;

function Event(e){
    
var oEvent &#61; document.all ? window.event : e;
    
if (document.all) {
        oEvent.pageX 
&#61; oEvent.clientX &#43; document.documentElement.scrollLeft;
        oEvent.pageY 
&#61; oEvent.clientY &#43; document.documentElement.scrollTop;
    }

    
return oEvent;
}


function addEventHandler(oTarget, sEventType, fnHandler) {
    
if (oTarget.addEventListener) {
        oTarget.addEventListener(sEventType, fnHandler, 
false);
    }
 else if (oTarget.attachEvent) {
        oTarget.attachEvent(
"on" &#43; sEventType, fnHandler);
    }
 else {
        oTarget[
"on" &#43; sEventType] &#61; fnHandler;
    }

}
;

function removeEventHandler(oTarget, sEventType, fnHandler) {
    
if (oTarget.removeEventListener) {
        oTarget.removeEventListener(sEventType, fnHandler, 
false);
    }
 else if (oTarget.detachEvent) {
        oTarget.detachEvent(
"on" &#43; sEventType, fnHandler);
    }
 else 
        oTarget[
"on" &#43; sEventType] &#61; null;
    }

}
;

var Class &#61; {
  create: 
function() {
    
return function() {
      
this.initialize.apply(this, arguments);
    }

  }

}


Object.extend 
&#61; function(destination, source) {
    
for (var property in source) {
        destination[property] 
&#61; source[property];
    }

    
return destination;
}



var Slippage &#61; Class.create();
Slippage.prototype 
&#61; {
  initialize: 
function(obj, options) {

    
this.obj &#61; $(obj);
    
this._timer &#61;null;
    
this._xs &#61; this._ys &#61; [];
    
this.X &#61; parseInt(this.obj.style.left) || 0;
    
this.Y &#61; parseInt(this.obj.style.top) || 0;
    
    
this.SetOptions(options);
    
this.Step &#61; Math.abs(this.options.Step);
    
this.Time &#61; Math.abs(this.options.Time);
    
this.Loop &#61; this.options.Loop;
    
this.Relative &#61; this.options.Relative;
    
    
this.SetPosition(this.options.X || [], this.options.Y || []);
  }
,
  
//设置默认属性
  SetOptions: function(options) {
    
this.options &#61; {//默认值
        Step:        10,//滑动变化率
        Time:        10,//滑动延时
        X:            [],//x坐标变化
        Y:            [],//y坐标变化
        Loop:        false,//是否循环
        Relative:    true//是否相对位置
    };
    Object.extend(
this.options, options || {});
  }
,
  
//
  SetPosition: function(arrX, arrY) {
    
if(arrX.length <&#61; 0 && arrX.length <&#61; 0return false;
    
else if(arrX.length <&#61; 0) arrX &#61; [0];
    
else if(arrY.length <&#61; 0) arrY &#61; [0];
    
    
this._xs &#61; arrX; this._ys &#61; arrY;
    
    
if(this.Relative){
        
for(var i in this._xs)if (i &#61;&#61; 0this._xs[0&#43;&#61; this.X; } else this._xs[i] &#43;&#61; this._xs[i-1]; } }
        
for(var i in this._ys)if (i &#61;&#61; 0this._ys[0&#43;&#61; this.Y; } else this._ys[i] &#43;&#61; this._ys[i-1]; } }
    }

    
    
this.Set();
  }
,
  
//
  Set: function() {
    
//当全部坐标指向同一个位置时会进入死循环
    if(this._xs.length <&#61; 0 && this._ys.length <&#61; 0return;
    
    
if(this._xs.length > 0this.X &#61; this._xs.shift();
    
if(this._ys.length > 0this.Y &#61; this._ys.shift();
    
    
if(this.Loop && this._xs.length > 0 && this._ys.length > 0this._xs.push(this.X);this._ys.push(this.Y); }
    
    
//$("aa").innerHTML&#43;&#61;this._ys.length&#43;"&#61;";
    this.Move(this.X, this.Y);
  }
,
  
//
  Move: function(iX, iY) {
    clearTimeout(
this._timer);

    
var iLeft &#61; parseInt(this.obj.style.left) || 0, iTop &#61; parseInt(this.obj.style.top) || 0, iLeftStep &#61; this.GetStep(iX, iLeft), iTopStep &#61; this.GetStep(iY, iTop);
    
    
if (iLeftStep &#61;&#61; 0 && iTopStep &#61;&#61; 0{
        
this.Set();
    }
 else {
        
this.obj.style.left &#61; (iLeft &#43; iLeftStep) &#43; "px"this.obj.style.top &#61; (iTop &#43; iTopStep) &#43; "px";
        
var oThis &#61; thisthis._timer &#61; setTimeout(function(){ oThis.Move(iX, iY); }this.Time);
    }

  }
,
  
//
  GetStep: function(iTarget, iNow) {
    
var iStep &#61; (iTarget - iNow) / this.Step;
    
if (iStep &#61;&#61; 0return 0;
    
if (Math.abs(iStep) < 1return (iStep > 0 ? 1 : -1);
    
return iStep;
  }

}
;

window.onload 
&#61; function(){
    
new Slippage("idSlippage3"{ X: [200,200,0,-200,-100,-100], Y: [0,0,100,-100,100,-100], Loop: true });
    
    
var oSlippage &#61; new Slippage("idSlippage");
    $(
"aa").onclick &#61; function(e)var oEvent &#61; Event(e);oSlippage.Move(oEvent.pageX, oEvent.pageY);}
    
    
var oSlippage2 &#61; new Slippage("idSlippage2"{ Step: 1, Relative: false }),x&#61;[],y&#61;[];
    $(
"bb").onmousedown &#61; function(e){ addEventHandler(this"mousemove", Set); }
    $(
"bb").onmouseout &#61; function(e){ removeEventHandler(this"mousemove", Set); x&#61;y&#61;[];}
    $(
"bb").onmouseup &#61; function(e){ removeEventHandler(this"mousemove", Set); oSlippage2.SetPosition(x, y);x&#61;y&#61;[];}
    
function Set(e)var oEvent &#61; Event(e); x.push(oEvent.pageX); y.push(oEvent.pageY); }
}


script>
head>
<body>
自动滑移:
<div id&#61;"cc" style&#61;"height:200px; width:500px; border:1px solid #000000;  position:relative;overflow:hidden;">
  
<div id&#61;"idSlippage3" style&#61;"width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:50px; left:50px;"> div>
div>
定点滑移:&#xff08;鼠标点击&#xff09;
<div id&#61;"aa" style&#61;"height:200px; width:500px; border:1px solid #000000; overflow:hidden;">
  
<div id&#61;"idSlippage" style&#61;"width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:-50px; left:50px;"> div>
div>
定线滑移:&#xff08;鼠标拖动轨迹&#xff09;
<div id&#61;"bb" style&#61;"height:200px; width:500px; border:1px solid #000000; overflow:hidden;">
  
<div id&#61;"idSlippage2" style&#61;"width:10px; height:10px; background:#000000; position:absolute; z-index:99; top:-50px; left:50px;"> div>
div>
body>
html>


本文转自博客园cloudgamer的博客&#xff0c;原文链接&#xff1a;Javascript 滑移效果&#xff0c;如需转载请自行联系原博主。



推荐阅读
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • C#多线程解决界面卡死问题的完美解决方案
    当界面需要在程序运行中不断更新数据时,使用多线程可以解决界面卡死的问题。一个主线程创建界面,使用一个子线程执行程序并更新主界面,可以避免卡死现象。本文分享了一个例子,供大家参考。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
周周ZHOUZHOUZHOU
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有