js实现使用鼠标拖拽切换图片的方法


Posted in Javascript onMay 04, 2015

本文实例讲述了js实现使用鼠标拖拽切换图片的方法。分享给大家供大家参考。具体实现方法如下:

<script type="text/javascript" src="js/jquery.min.js"></script>
<style type="text/css">
*{margin:0;padding:0;}
.m-slider{width:600px;margin:0 auto 10px !important;}
#slider{width:100%; overflow:hidden;}
.m-slider .cnt{position:relative;left:0;width:2000%;}
.m-slider .cnt li{float:left;width:5%; height: 450px;
overflow: hidden;
}
.m-slider .cnt img{
display:block;width:100%;height:450px;
vertical-align:top;
}
.m-slider .cnt p{margin:10px 0;}
.m-slider .icons{text-align:center;color:#000;
position: relative; z-index: 999; margin-top: -20px;
}
.m-slider .icons span{
background: #fff; border-radius: 5px;
box-shadow: 0 0 2px #b0b0b0 inset; display: inline-block;
height: 10px; margin: 0 5px; overflow: hidden;
text-indent: -99em; width: 10px;
}
.m-slider .icons .curr{
background:#f80; box-shadow: 0 0 2px #f60 inset
}
</style>
<div class="m-slider">
<div id="slider">
<ul id="m-slider" class="cnt">
<li><a href="#1"><img src="images/mofe.jpg" alt="" /></a></li>
<li><a href="#2"><img src="images/9hll.jpg" alt="" /></a></li>
<li><a href="#3"><img src="images/p2bb.jpg" alt="" /></a></li>
<li><a href="#4"><img src="images/3srp.jpg" alt="" /></a></li>
<li><a href="#1"><img src="images/ft9s.jpg" alt="" /></a></li>
</ul>
</div>
<div id="icons" class="icons"><span class="curr">1</span>
<span>2</span> <span>3</span> <span>4</span> <span>5</span>
</div>
</div>
<script type="text/javascript">
jQuery(document).ready(function($){
 var $slider = $('#m-slider');
 var $icons = $('#icons');
 var $li = $slider.children('li');
 var WIDTH = $li.width();
 var SIZE = $li.size();
 $slider.append($li.first().clone());
 //console.log(WIDTH + '-' + SIZE);
 var ox,mx,ux,sumx,scroll,i=0,bool=false,staut=true;
 $li.find('a').click(function(){
 //阻止轮播元素的默认点击事件
  return false;
 });
 $slider.mousedown(function(e){
 //鼠标左键轮播区域
  if(e.target.tagName == 'IMG' && e.button == 0){
 //左键图片
   staut = true;
  //初始化拖拽,状态为true,可以触发点击事件
   sumx = 0;
   //初始化鼠标偏移为0
   bool = true;
   //记录左键状态
   ox = e.pageX;
   //记录鼠标初始坐标
   scroll = $slider.parent().scrollLeft();
   //记录初始轮播水平滚动偏移
   e.preventDefault();
   //阻止鼠标点击默认事件
  }
 });
 $slider.mousemove(function(e){
 //鼠标在轮播区域移动
  if(bool){//左键状态
   staut = false;
   //已经拖拽,状态为false,不再触发点击事件
   mx = e.pageX;
   //记录鼠标实时坐标
   sumx = ox - mx;
   //记录鼠标坐标偏移
   $slider.parent().scrollLeft(scroll+sumx);
  }
 });
 $slider.mouseout(function(e){
 //鼠标离开轮播区域
  if(bool){
 //左键状态
   staut = true;
   //已经拖拽,但是离开了轮播区域,
   //状态为true,可以触发点击事件
   bool = false;//释放左键状态
   sumx > 0 && i < SIZE && i++;//下一个
   sumx < 0 && i > 0 && i--;//上一个
   $slider.parent().stop().animate({scrollLeft:i*WIDTH},300,function(){
    if(i == SIZE){
     i = 0;
     $slider.parent().scrollLeft(0);
    }
    $icons.find('.curr').removeClass('curr').end().children().eq(i).addClass('curr');
   });//完成拖拽
  }
 });
 $slider.mouseup(function(e){
 //鼠标释放,完成click事件
  bool = false;
  //释放左键状态
  if(staut && e.button == 0){
  //没有拖拽或者拖拽失效,且是左键,触发点击事件
   window.location.href = $(e.target).parent().attr('href');
   //触发点击事件
  }else if(!staut && e.button == 0){
  //成功拖拽,且是左键
   sumx > 0 && i < SIZE && i++;//下一个
   sumx < 0 && i > 0 && i--;//上一个
   $slider.parent().stop().animate({scrollLeft:i*WIDTH},300,function(){
    if(i == SIZE){
    //最后一个
     i = 0;
     $slider.parent().scrollLeft(0);//归位
    }
    $icons.find('.curr').removeClass('curr').end().children().eq(i).addClass('curr');
   });//完成拖拽
  }
 });
 function setSlider(){
   i < SIZE && i++;//下一个
   $slider.parent().stop().animate({scrollLeft:i*WIDTH},300,function(){
    if(i == SIZE){//最后一个
     i = 0;
     $slider.parent().scrollLeft(0);
    }
    $icons.find('.curr').removeClass('curr').end().children().eq(i).addClass('curr');
   });//完成拖拽
 }
 var timer = setInterval(function(){
  setSlider();
 },3000);
 $slider.hover(function(){
  if(timer){
   clearInterval(timer);
   timer = null;
  }
 },function(){
  timer = setInterval(function(){
   setSlider();
  },3000);
 });
 $(window).resize(function(){
  WIDTH = $li.width();
  $slider.parent().scrollLeft(i*WIDTH);//归位
  //console.log(WIDTH + '-' + i);
 });
});
</script>

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

Javascript 相关文章推荐
浅谈javascript 面向对象编程
Oct 28 Javascript
JS代码优化技巧之通俗版(减少js体积)
Dec 23 Javascript
js 遍历json返回的map内容示例代码
Oct 29 Javascript
js window.open弹出新的网页窗口
Jan 16 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
Jul 22 Javascript
详解vue之页面缓存问题(基于2.0)
Jan 10 Javascript
Angularjs单选改为多选的开发过程及问题解析
Feb 17 Javascript
微信小程序商城项目之淘宝分类入口(2)
Apr 17 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
Oct 10 jQuery
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
Jul 09 Javascript
js实现每日自动换一张图片的方法
May 04 #Javascript
jQuery仿天猫实现超炫的加入购物车
May 04 #Javascript
JavaScript中操作字符串小结
May 04 #Javascript
JavaScript中常见的字符串操作函数及用法汇总
May 04 #Javascript
javascript多行字符串的简单实现方式
May 04 #Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 #Javascript
js实现兼容IE和FF的上下层的移动
May 04 #Javascript
You might like
用PHP生成html分页列表的代码
2007/03/18 PHP
PHP类和对象相关系统函数与运算符小结
2016/09/28 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
JavaScript脚本语言在网页中的简单应用
2007/05/13 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
js 判断浏览器使用的语言示例代码
2014/03/22 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
Node.JS更改Windows注册表Regedit的方法小结
2017/08/18 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
JS中Promise函数then的奥秘探究
2018/07/30 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
python3处理word文档实例分析
2020/12/01 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
大学生职业规划前言模板
2013/12/27 职场文书
感恩之星事迹材料
2014/05/03 职场文书
社区平安建设方案
2014/05/25 职场文书
体育节口号
2014/06/19 职场文书
2014年导购员工作总结
2014/11/18 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js