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 相关文章推荐
jQuery的三种$()
Dec 30 Javascript
js 创建书签小工具之理论
Feb 25 Javascript
关于URL中的特殊符号使用介绍
Nov 03 Javascript
JS实现仿新浪黄色经典滑动门效果代码
Sep 27 Javascript
javascript实现简单加载随机色方块
Dec 25 Javascript
JS中setTimeout和setInterval的最大延时值详解
Feb 13 Javascript
webpack 1.x升级过程中的踩坑总结大全
Aug 09 Javascript
javascript将url解析为json格式的两种方法
Aug 18 Javascript
JS禁止浏览器右键查看元素或按F12审查元素自动关闭页面示例代码
Sep 07 Javascript
vue-router传递参数的几种方式实例详解
Nov 13 Javascript
JavaScript选择器函数querySelector和querySelectorAll
Nov 27 Javascript
什么是SOLID
Mar 24 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使用pack处理二进制文件的方法
2014/07/03 PHP
ThinkPHP做文字水印时提示call an undefined function exif_imagetype()解决方法
2014/10/30 PHP
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
PHP函数按引用传递参数及函数可选参数用法示例
2018/06/04 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
微信禁止下拉查看URL的处理方法
2017/09/28 Javascript
微信小程序 wx:for 与 wx:for-items 与 wx:key的正确用法
2020/05/19 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
Python中死锁的形成示例及死锁情况的防止
2016/06/14 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
python中Django文件上传方法详解
2020/08/05 Python
Html5游戏开发之乒乓Ping Pong游戏示例(一)
2013/01/21 HTML / CSS
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
丑小鸭教学反思
2014/02/03 职场文书
询价采购方案
2014/06/09 职场文书
委托书范本
2014/09/13 职场文书
2014年调度员工作总结
2014/11/19 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
2020年基层司法所建设情况调研报告
2019/11/30 职场文书
python通过新建环境安装tfx的问题
2022/05/20 Python
如何基于python实现单目三维重建详解
2022/06/25 Python