jQuery拖拽放大缩小插件idrag

所属分类:输入-拖和放

 101424  400  查看评论 (29)
分享到微信朋友圈
X
jQuery拖拽放大缩小插件idrag ie兼容6

基于jQuery:

$(document).mousemove(function(e) {
    if (!!this.move) {
        var posix = !document.move_target ? {'x': 0, 'y': 0} : document.move_target.posix,
            callback = document.call_down || function() {
                $(this.move_target).css({
                    'top': e.pageY - posix.y,
                    'left': e.pageX - posix.x
                });
            };
 
        callback.call(this, e, posix);
    }
}).mouseup(function(e) {
    if (!!this.move) {
        var callback = document.call_up || function(){};
        callback.call(this, e);
        $.extend(this, {
            'move': false,
            'move_target': null,
            'call_down': false,
            'call_up': false
        });
    }
});

原理稍后分析,先来看看效果:

title="" width="800" height="219" border="0" hspace="0" vspace="0" style="width: 800px; height: 219px;"/>

将代码剥离,只要写5行就可以实现拖拽了,是不是很简单:

$('#box').mousedown(function(e) {
    var offset = $(this).offset();
     
    this.posix = {'x': e.pageX - offset.left, 'y': e.pageY - offset.top};
    $.extend(document, {'move': true, 'move_target': this});
});

将代码剥离,原先的代码保留不变,增加一个绑定事件:

var $box = $('#box').mousedown(function(e) {
    var offset = $(this).offset();
     
    this.posix = {'x': e.pageX - offset.left, 'y': e.pageY - offset.top};
    $.extend(document, {'move': true, 'move_target': this});
}).on('mousedown', '#coor', function(e) {
    var posix = {
            'w': $box.width(), 
            'h': $box.height(), 
            'x': e.pageX, 
            'y': e.pageY
        };
     
    $.extend(document, {'move': true, 'call_down': function(e) {
        $box.css({
            'width': Math.max(30, e.pageX - posix.x + posix.w),
            'height': Math.max(30, e.pageY - posix.y + posix.h)
        });
    }});
    return false;
});

这样来实现放大、缩小、拖拽是不是很简答,还能实现很多其他效果,大家慢慢领悟。


原理分析:


放大、缩小、拖拽都离不开在网页上拖动鼠标,对于前端来说就是document的mousemove,当鼠标在网页上移动的时候,无时无刻不在触发mousemove事件,当鼠标触发事件时,什么时候需要执行我们特定的操作,这就是我们要做的了。我在mousemove中增加了几个对象来判定是否进行操作:

    move:是否执行触发操作

    move_target:操作的元素对象

    move_target.posix:操作对象的坐标

    call_down:mousemove的时候的回调函数,传回来的this指向document

    call_up:当鼠标弹起的时候执行的回调函数,传回来的this指向document


小提示:

    简单的操作,只需要设定move_target对象,设置move_target的时候不要忘记了move_target.posix哦;

    复杂的操作可以通过call_down、call_up进行回调操作,这个时候是可以不用设置move_target对象的

相关插件-拖和放

图标拖拽效果,兼容所有浏览器

原生JS实现图标图片拖拽,封装好了,可以直接拿去使用
  拖和放
 38701  374

jQuery双击拖拽图片

jQuery鼠标双击事件拖拽图片
  拖和放
 30025  298

鼠标轨迹跟随

鼠标轨迹跟随
  拖和放
 38590  310

jQuery移动端滑动标尺

移动端卡尺,滑动标尺,标不动
  拖和放
 25238  319

讨论这个项目(29)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    长的? 0
    2021/8/17 11:52:21
    怎么实现头部可拖动呢?
    回复
    夜礼服 0
    2020/7/20 16:20:20
    ↘蓅蒗的小孩 0
    2019/8/26 17:33:40
    asaguise 0
    2019/7/12 14:48:18
    能四周都能拖动的那种吗?不知局限一个角 回复
    - very knave 0
    2019/5/15 10:00:36
    父级元素出现滚动条,拖动会出现问题,这个怎么解决? 回复
    maker 0
    2019/2/22 17:24:10
    如何在指定的区域内进行拖拽。
        驱魔人0
        2019/3/25 15:50:16
        获取div的大小,位置,用数学函数来将该值限定在div的大小中
    回复
    陈秋东 0
    2018/6/19 15:22:28
    为什么id改成class就拖拽不了
        南来北往0
        2019/3/25 11:58:52
        我的东西是你可以乱改的吗
        驱魔人0
        2019/3/25 15:43:01
        我的东西是你可以乱改的吗?
    回复
    蓁蓁 0
    2017/11/7 10:11:12
    ╃ 伊人未归 ┽ 0
    2017/2/23 17:02:00
    在途中 0
    2016/12/28 16:12:09

    怎么实现四个边分别拖动

    回复
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复