jQuery实现html元素拖拽


Posted in Javascript onJuly 21, 2015

代码很简单,效果非常棒,直接给大家上源码:

html

<div>
  <div class="money-input">
    定投金额 :
    <div class="input-rela">
      <input type="text" placeholder="2000"/>
      <span>元</span>
    </div>

  </div>
  <div class="money-line">
    <img index="js-minus-a" class="js-minus" src="../images/minus.png" alt=""/>
    <img id="dragImg" class="red-rela" src="../images/money-dw.png" alt="" onDrag="drag(event)" onDragEnd="dragEnd(event)" style="left: 265px;"/>
    <img id="dragLine" class="line3" src="../images/money-line.png" alt=""/>
    <img index="js-plus-a" class="js-plus" src="../images/plus.png" alt="" style="margin-left: 880px;"/>
  </div>
  <div class="money-desc">
    <span style="margin-left: 65px;">100</span>
    <span>500</span>
    <span>1000</span>
    <span>2000</span>
    <span>3000</span>
    <span>4000</span>
    <span>5000</span>
    <span>6000</span>
    <span>7000</span>
    <span>8000</span>
    <span>9000</span>
    <span>10000</span>
  </div>
  <p>单位:元</p>
</div>

css

.money-input{margin:36px auto 0;width:330px;font-size:14px;color:#818181}
 .input-rela{width:250px;height:42px;display:inline-block;position:relative}
 .input-rela>input{width:inherit;height:38px;border:1px solid #eee}
 .input-rela>span{position:absolute;right:10px;top:13px}
 .money-line{width:970px;margin:60px auto 0;position:relative}
 .line3{position:absolute;left:40px;top:10px}
 .red-rela{position:absolute;top:0;z-index:2;cursor:pointer}
 .money-desc,.month-desc{font-size:12px;color:#818181}
 .money-desc+p,.month-desc+p{margin-right:60px;text-align:right;color:#5a5a5a}
 .money-desc>span{display:inline-block;width:71px}
 .month-desc>span{display:inline-block;width:79px}

js

/**
* Created by cq on 2015/6/15.
*/
$(function(){

  $('.js-minus').click(function(){
    /* min need calculate*/
    var index = $(this).attr("index")
    var move,min;
    if(index=="js-minus-a"){
      move = 77;
      min = 34;
    }
    if(index=="js-minus-b"){
      move = 85;
      min = 36;
    }
    var redPoint = $(this).next()
    var left = redPoint.css("left")
    var leftInt = left.replace(/px/g,"")
    if((parseInt(leftInt)-move)>=min){
      var newLeft = (parseInt(leftInt)-move)+"px"
      redPoint.css("left",newLeft)
      var num = parseInt ( (parseInt(leftInt)-move-min) / move )
      var input = $(this).parent().prev().find("input")
      if(index=="js-minus-a"){
        var spans = $(this).parent().next().find("span")
        var html = spans.eq(num).html()
        input.val(html)
      }
      if(index=="js-minus-b"){
        input.val(getMonth(num))
      }
    }
  })

  $('.js-plus').click(function(){
    /* max and min need calculate*/
    var index = $(this).attr("index")
    var move , max , min ;
    if(index=="js-plus-a"){
      move = 77; //ÿ��ƫ����
      max = 881; //��������
      min = 34; //��Сƫ����
    }
    if(index=="js-plus-b"){
      move = 85;
      max = 886;
      min = 36;
    }

    var redPoint = $(this).prev().prev()
    var left = redPoint.css("left")
    var leftInt = left.replace(/px/g,"")
    if((parseInt(leftInt)+move)<=max){
      var newLeft = (parseInt(leftInt)+move)+"px"
      redPoint.css("left",newLeft)
      var num = parseInt( (parseInt(leftInt)+move-min) / move )
      var input = $(this).parent().prev().find("input")
      if(index=="js-plus-a"){
        var spans = $(this).parent().next().find("span")
        var html = spans.eq(num).html()
        input.val(html)
      }
      if(index=="js-plus-b"){
        input.val(getMonth(num))
      }
    }
  })

  /*move img js*/
  var offsetx = 0, offsety = 0;
  var dragImg = document.getElementById("dragImg")
  dragImg.addEventListener("mousedown",beforeDrag,true);
})

function beforeDrag(ev){
  dragImg = ev.target;
  var l = dragImg.offsetLeft;
  var t = dragImg.offsetTop;
  offsetx = ev.clientX - l;
  offsety = ev.clientY - t;
}

function drag(e){
  e.preventDefault();
  /*min need calculate*/
  var ml = 8,mr = 20,maxy = 70,moveWidth = 77,min=34;
  var dragImg = e.target;
  var dragLine = document.getElementById("dragLine");
  var movex = e.clientX - offsetx;
  var movey = e.clientY - offsety;
  var minPY = dragLine.offsetLeft-ml;
  var maxPY = dragLine.offsetLeft+dragLine.clientWidth-mr;
  if(Math.abs(movey)>maxy){
    return
  }
  if(movex<minPY){
    dragImg.style.left = minPY + "px";
    return
  }
  if(movex>maxPY){
    dragImg.style.left = maxPY + "px";
    return
  }
  dragImg.style.left = movex + "px";

}

function dragEnd (e){
  e.preventDefault();
  /*min need calculate*/
  var ml = 8,mr = 20,maxy = 70,moveWidth = 77,min=34;
  var dragImg = e.target;
  var dragLine = document.getElementById("dragLine");
  var movex = e.clientX - offsetx;
  var movey = e.clientY - offsety;
  var minPY = dragLine.offsetLeft-ml;
  var maxPY = dragLine.offsetLeft+dragLine.clientWidth-mr;

  if(movex<minPY){
    dragImg.style.left = minPY + "px";
    $(dragImg).parent().prev().find("input").val(100)
    return
  }
  if(movex>maxPY){
    dragImg.style.left = maxPY + "px";
    $(dragImg).parent().prev().find("input").val(10000)
    return
  }
  /*dragEnd xifu*/
  var num = parseInt ( movex / moveWidth )
  dragImg.style.left = (min+moveWidth*num) + "px";
  /*dragEnd set input*/
  var thisNode = $(dragImg)
  var spans = thisNode.parent().next().find('span')
  var html = spans.eq(num).html()
  var input = thisNode.parent().prev().find("input")
  input.val(html)
}

/*
function init() {
document.body.onmousemove = function(e) {
if (!e) {
e = window.event;
}
else {
e.srcElement = e.target;
}
document.getElementById("divDebug").innerHTML = "mousemove (" + e.clientX + "," + e.clientY + ") srcElement=" + e.srcElement.tagName + "[" + e.srcElement.id + "]";
}
}*/

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
兼容ie、firefox的图片自动缩放的css跟js代码分享
Aug 12 Javascript
document.getElementBy(&quot;id&quot;)与$(&quot;#id&quot;)有什么区别
Sep 22 Javascript
jquery easyui combox一些实用的小方法
Dec 25 Javascript
AngularJS语法详解
Jan 23 Javascript
JS延时器提示框的应用实例代码解析
Apr 27 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
Vue中引入样式文件的方法
Aug 18 Javascript
layui插件表单验证提交触发提交的例子
Sep 09 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
Jul 20 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
Nov 03 Javascript
异步安全加载javascript文件的方法
Jul 21 #Javascript
jquery实现鼠标滑过小图查看大图的方法
Jul 20 #Javascript
详细介绍jQuery.outerWidth() 函数具体用法
Jul 20 #Javascript
SWFObject基本用法实例分析
Jul 20 #Javascript
jQuery.prop() 使用详解
Jul 19 #Javascript
javascript中setAttribute()函数使用方法及兼容性
Jul 19 #Javascript
jQuery的position()方法详解
Jul 19 #Javascript
You might like
php预定义常量
2006/12/25 PHP
php 不同编码下的字符串长度区分
2009/09/26 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
js 为label标签和div标签赋值的方法
2013/08/08 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
浅谈JavaScript Date日期和时间对象
2014/12/29 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
js, jQuery实现全选、反选功能
2017/03/08 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
JS实现监控微信小程序的原理
2018/06/15 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python中几种自动微分库解析
2019/08/29 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
早会主持词
2014/03/17 职场文书
女生节标语
2014/06/26 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
教代会闭幕词
2015/01/28 职场文书
2015年端午节活动总结
2015/02/11 职场文书
2015毕业设计工作总结
2015/07/24 职场文书
如何在Python项目中引入日志
2021/05/31 Python