JS实现网页游戏中滑块响应鼠标点击移动效果


Posted in Javascript onOctober 19, 2015

本文实例讲述了JS实现网页游戏中滑块响应鼠标点击移动效果。分享给大家供大家参考,具体如下:

这是网页游戏中的一个有趣效果,可以完成以下几个动作:滚动、scroll 8个方向、鼠标坐标获娶对象上下左右位置获取,大家可以自己添加、MoveReady和ScrollReady两个注释掉了 取消注释后防止鼠标连续点击效果叠加。

在线演示地址如下:

具体代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>网页游戏中的一个有趣效果</title>
<style type="text/css">
html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,address,big,cite,del,em,img,ins,small,strong,sub,sup,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,tbody,tfoot,tr,th,td{margin: 0;padding: 0;border: 0;outline: 0;font-size: 100%;vertical-align: baseline;background: transparent;}
body{font:12px/24px "宋体";background:#fff;color:#333;}
ol, ul{list-style:none;}
blockquote, q {quotes:none;}
blockquote:before, blockquote:after,
q:before, q:after {content: '';content:none;}
:focus {outline:0;}
ins {text-decoration:none;}
del {text-decoration:line-through;}
table {border-collapse:collapse;border-spacing:0;}
label{cursor:pointer}
input[type="button"]{cursor:pointer}
button{cursor:pointer}
strong{font-weight:normal;}
em{font-style:normal}
a{text-decoration:none;color:#f60}
a:hover{text-decoration:underline;}
.block{width:200px;height:200px;background:#e63;position:absolute;left:50%;top:50%;border:3px solid #fdd;overflow:hidden;}
.moveBlock{width:1900px;height:2728px;background:url("//img.jbzj.com/file_images/article/201510/2015101993654799.jpg") left top;}
</style>
<script type="text/javascript">
var ie = ! -[1, ], myDate = new Date();
function Sin(x,v) {
 var y = Math.round(Math.sin(Math.PI*x/180)*100)/100;
 return ie?y*v*3:y*v;
}
/*返回数组序号*/
Num = function(e, eles) {
 for (var i = 0; i < eles.length; i++) {
 if (eles[i] == e) { return i; }
 }
}
/*字符串判定*/
GetCur = function(Str, cur) {
 var str = new RegExp(cur, "gi")
 return str.test(Str);
}
/*DOM构造*/
var div=function(id){return new HtmlEle.init(id);}
HtmlEle={
 init:function(id){
  this[0]=id==Object?id:document.getElementById(id);
  return this;
 },
 css:function(s){
  for(var i in s){
   this[0].style[i]=s[i];
  }
 },
 Obj:function(){
  var obj=this[0];
  var objTop=obj.offsetTop,objLeft=obj.offsetLeft,objWidth=obj.offsetWidth,objHeight=obj.offsetHeight;
  return {top:objTop,right:objLeft+objWidth,bottom:objTop+objHeight,left:objLeft,width:objWidth,height:objHeight}
 },
 MoveReady:true,
 Move:function(s,point){
  var obj=this[0],n=0,v=s,main=this,v2=90;
  if(this.MoveReady==true){
   //main.MoveReady=false;
   var Top=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.style.top=P-m+"px"}else{obj.style.top=P-s+"px";clearInterval(myMove);main.MoveReady=true;};
   }
   var Right=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.style.left=P+m+"px"}else{obj.style.right=P+s+"px";clearInterval(myMove);main.MoveReady=true;};
   }
   var Bottom=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.style.top=P+m+"px"}else{obj.style.top=P+s+"px";clearInterval(myMove);main.MoveReady=true;};
   }
   var Left=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.style.left=P-m+"px"}else{obj.style.left=P-s+"px";clearInterval(myMove);main.MoveReady=true;};
   }
   switch(point){
    case "top" : var P=obj.offsetTop,Point=Top;break;
    case "right" : var P=obj.offsetLeft,Point=Right;break;
    case "bottom" : var P=obj.offsetTop,Point=Bottom;break;
    case "left" : var P=obj.offsetLeft,Point=Left;break;
   }
   var myMove=setInterval(Point,5)
  }
 },
 ScrollReady:true,
 Scroll:function(s,point){
  var obj=this[0],n=0,v=s,main=this,v2=90;
  if(this.ScrollReady==true){
   //main.ScrollReady=false;
   var Top=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.scrollTop=P+m}else{obj.scrollTop=P+s;clearInterval(myMove);main.ScrollReady=true;};
   }
   var Right=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.scrollLeft=P-m}else{obj.scrollLeft=P-s;clearInterval(myMove);main.ScrollReady=true;};
   }
   var Bottom=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.scrollTop=P-m}else{obj.scrollTop=P-s;clearInterval(myMove);main.ScrollReady=true;};
   }
   var Left=function(){
    n=n<v2?n+1:n;
    var m=Sin(n,v);
    if(m<Math.abs(s)){obj.scrollLeft=P+m}else{obj.scrollLeft=P+s;clearInterval(myMove);main.ScrollReady=true;};
   }
   switch(point){
    case "top" : var P=obj.scrollTop,Point=Top;break;
    case "right" : var P=obj.scrollLeft,Point=Right;break;
    case "bottom" : var P=obj.scrollTop,Point=Bottom;break;
    case "left" : var P=obj.scrollLeft,Point=Left;break;
   }
   var myMove=setInterval(Point,5)
  }
 },
 Mouse:function(e,f){
  switch(e){
   case "click" : this[0].onclick=f;break;
   case "dbclick" : this[0].ondblclick=f;break;
   case "over" : this[0].onmouseover=f;break;
   case "out" : this[0].onmouseout=f;break;
  }
 },
 MouseSite:function(e){
  var e=e?e:window.event;
  return {x:e.clientX,y:e.clientY}
 }
}
HtmlEle.init.prototype=HtmlEle;
</script>
</head>
<body>
<div class="block" id="moveBlock">
 <div class="moveBlock"></div>
</div>
<script type="text/javascript">
var sBlock=new div("moveBlock");
document.onclick=function(){
 var site=sBlock.MouseSite(arguments[0]),s=200,b=30;
 var objSite=sBlock.Obj();
 if(objSite.left<site.x && objSite.left+objSite.width/2-b>site.x && objSite.top<site.y &&objSite.bottom>site.y)
  sBlock.Scroll(s,"left");
 if(objSite.right>site.x && objSite.right-objSite.width/2+b<site.x && objSite.top<site.y &&objSite.bottom>site.y)
  sBlock.Scroll(s,"right");
 if(objSite.top<site.y && objSite.top+objSite.height/2-b>site.y && objSite.left<site.x && objSite.right>site.x)
  sBlock.Scroll(s,"top");
 if(objSite.bottom>site.y && objSite.bottom-objSite.height/2+b<site.y)
  sBlock.Scroll(s,"bottom");
 if(objSite.left>site.x)
  sBlock.Move(s,"left");
 if(objSite.right<site.x)
  sBlock.Move(s,"right");
 if(objSite.top>site.y)
  sBlock.Move(s,"top");
 if(objSite.bottom<site.y)
  sBlock.Move(s,"bottom");
}
window.onload=function(){sBlock[0].scrollTop=0;sBlock[0].scrollLeft=0;}
</script>
</body>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript 火狐(firefox)不显示本地图片问题解决
Jul 05 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
最丑的时钟效果!js canvas时钟制作方法
Aug 15 Javascript
微信小程序 数组中的push与concat的区别
Jan 05 Javascript
vue2.0父子组件及非父子组件之间的通信方法
Jan 21 Javascript
JavaScript类的继承方法小结【组合继承分析】
Jul 11 Javascript
ajax与jsonp的区别及用法
Oct 16 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
Nuxt 项目性能优化调研分析
Nov 07 Javascript
Promise静态四兄弟实现示例详解
Jul 07 Javascript
在JavaScript中如何解决用execCommand(
Oct 19 #Javascript
简单谈谈Javascript中类型的判断
Oct 19 #Javascript
AngularJS 实现按需异步加载实例代码
Oct 18 #Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 #Javascript
Javascript中的数据类型之旅
Oct 18 #Javascript
谈谈JavaScript自定义回调函数
Oct 18 #Javascript
JS实现的网页背景闪电闪烁效果代码
Oct 17 #Javascript
You might like
用PHP和ACCESS写聊天室(三)
2006/10/09 PHP
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
基于Bootstrap实现Material Design风格表单插件 附源码下载
2016/04/18 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
javascript简单链式调用案例分析
2017/05/10 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
js获取html页面代码中图片地址的实现代码
2018/03/05 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
python使用fileinput模块实现逐行读取文件的方法
2015/04/29 Python
让Python代码更快运行的5种方法
2015/06/21 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
python3实现抓取网页资源的 N 种方法
2017/05/02 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Django的models模型的具体使用
2019/07/15 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
酒店司机岗位职责
2013/12/14 职场文书
父亲生日宴会答谢词
2014/01/10 职场文书
小学二年级学生评语
2014/04/21 职场文书
爱国主义演讲稿
2014/05/07 职场文书
后备干部推荐材料
2014/12/24 职场文书
大学毕业谢师宴致辞
2015/07/27 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
聊聊golang中多个defer的执行顺序
2021/05/08 Golang
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
SQL Server中搜索特定的对象
2022/05/25 SQL Server