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 21 Javascript
jQuery筛选器children()案例详解(图文)
Feb 17 Javascript
JavaScript简介
Feb 15 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
使用koa2创建web项目的方法步骤
Mar 12 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 Javascript
vue项目前端错误收集之sentry教程详解
May 27 Javascript
javascript实现的字符串转换成数组操作示例
Jun 13 Javascript
JS利用prototype给类添加方法操作详解
Jun 21 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
原生javascript单例模式的应用实例分析
Feb 23 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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的实体引用的一个类
2013/02/03 PHP
php创建sprite
2014/02/11 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
lib.utf.js
2007/08/21 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
javascript的函数劫持浅析
2016/09/26 Javascript
自定义事件解决重复请求BUG的问题
2017/07/11 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
layui复选框的全选与取消实现方法
2019/09/02 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
2020/07/09 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
Python常见异常分类与处理方法
2017/06/04 Python
你真的了解Python的random模块吗?
2017/12/12 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
使用python opencv对目录下图片进行去重的方法
2019/01/12 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
python实现抽奖小程序
2020/04/15 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
python def 定义函数,调用函数方式
2020/06/02 Python
size?法国官网:英国伦敦的球鞋精品店
2020/03/15 全球购物
舞蹈比赛获奖感言
2014/02/04 职场文书
文明家庭先进事迹材料
2014/05/14 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
2014年资料员工作总结
2014/11/18 职场文书
初中英语教学随笔
2015/08/15 职场文书
入党申请书怎么写?
2019/06/21 职场文书
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS