拖动效果

css部分:

<style type="text/css">
    .page{text-align:left;}
    .dragDiv{   border:1px solid #ddd;   padding:10px;   width:300px;   height:150px;   margin:0 auto;   border-radius:4px;    box-shadow:0 1px 2px #fefefe;    position: fixed;    }
</style>

html部分:

<div class="dragDiv" id="drag">
    <div class="drag-head"></div>
    <div class="drag-body">
        drag me
    </div>
</div>

js部分:(此处需要引入jquery.js)

<script>
    var _drag = {};
    _drag.top = 0; //拖动过的位置距离上边
    _drag.left = 0; //拖动过的位置距离左边
    _drag.maxLeft; //距离左边最大的距离
    _drag.maxTop; //距离上边最大的距离
    _drag.dragging = false; //是否拖动标志
    //拖动函数
    function bindDrag(el){
        var winWidth = $(window).width(), winHeight =$(window).height(),objWidth = $(el).outerWidth(), objHeight = $(el).outerHeight();
        _drag.maxLeft = winWidth - objWidth, _drag.maxTop = winHeight - objHeight;
        var els = el.style,x=0,y=0;
        var objTop = $(el).offset().top, objLeft = $(el).offset().left;
        $(el).mousedown(function(e){
            _drag.dragging = true;
            _drag.isDragged = true;
            x = e.clientX - el.offsetLeft;
            y = e.clientY - el.offsetTop;
            el.setCapture && el.setCapture();
            $(document).bind(‘mousemove‘,mouseMove).bind(‘mouseup‘,mouseUp);
            return false;
        });
        function mouseMove(e){
            e = e || window.event;
            if(_drag.dragging){
                _drag.top = e.clientY - y;
                _drag.left = e.clientX - x;
                _drag.top = _drag.top > _drag.maxTop ? _drag.maxTop : _drag.top;
                _drag.left = _drag.left > _drag.maxLeft ? _drag.maxLeft : _drag.left;
                _drag.top = _drag.top < 0 ? 0 : _drag.top;
                _drag.left = _drag.left <0 ? 0 : _drag.left;
                els.top = _drag.top + ‘px‘;
                els.left = _drag.left+ ‘px‘;
                return false;
            }

        }
        function mouseUp(e){
            _drag.dragging = false;
            el.releaseCapture && el.releaseCapture();
            e.cancelBubble = true;
            $(document).unbind(‘mousemove‘,mouseMove).unbind(‘mouseup‘,mouseUp);
        }
        $(window).resize(function(){
            var winWidth = $(window).width(),
                    winHeight = $(window).height(),
                    el = $(el),
                    elWidth = el.outerWidth(),
                    elHeight = el.outerHeight(),
                    elLeft = parseFloat(el.css(‘left‘)),
                    elTop = parseFloat(el.css(‘top‘));
            _drag.maxLeft = winWidth - elWidth;
            _drag.maxTop = winHeight - elHeight;
            _drag.top = _drag.maxTop < elTop ? _drag.maxTop : elTop;
            _drag.left = _drag.maxLeft < elLeft ? _drag.maxLeft : elLeft;
            el.css({
                top:_drag.top,
                left:_drag.left
            })
        })
    }
    bindDrag(document.getElementById(‘drag‘));
</script>
时间: 2024-10-31 06:34:02

拖动效果的相关文章

使用jquery实现简单的拖动效果,分享源码

因为想实现相框的拖到,找了半天的原因愣是没有找到错误,所以,只能翻看源码了 如何实现拖动效果? 浏览DEMO 首先分析下拖动效果原理: 1.当鼠标在被拖动对象上按下鼠标(触发onmousedown事件,且鼠标在对象上方) 2.开始移动鼠标(触发onmousemove事件) 3.移动时更显对象的top和left值 4.鼠标放开停止拖动(触发onmouseup事件) 注意:拖动的对象必须是定位对象(即设置了position:absolute或 relative). 也就是说拖动事件=onmoused

简单的鼠标拖动效果

使用js实现简单的鼠标拖动效果,但此部分代码有个小小的BUG,后期改进好我会写进来,但基本的效果已经实现,请大家参考. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>鼠标移动</title> <style> #box{ width: 50px; height: 50px; position:

js实现的div拖动效果实例代码

js实现的div拖动效果实例代码:div的拖动效果在很多效果中都有应用,当然还有很多附加的功能,本章节只是给拖动效果,并介绍一下它的实现过程.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <t

Web的鼠标拖动效果

以前写过一个拖动效果的Demo,拖拽元素新位置的计算是放在拖拽元素的mousemove事件中进行的.计算效率差,而且效果不好.所以一直有想怎样才能做出jquery-ui那种顺滑的拖拽效果. 其实顺滑的拖拽效果的突破口有两点: 事件捕捉要去捕捉document的鼠标位置. 使用setInterval功能计算拖拽元素的新位置. 使用jQuery,经过一些简单的重构和调试,将代码完善如下: drag.html <!DOCTYPE html> <html> <head> <

运用HTML5原生拖动事件(drag)实现拖动效果

拖动效果相信很多朋友都自己写过,不管你用原生JS还是Jquery要实现起来也很简单,但是今天我想介绍的是运用HTML5标准中定义的原生拖动事件实现拖动效果. 一.背景: 其实说是HTML5标准定义,其实最早在IE4中就有拖放功能的API,只是在IE4中,网页中只有两种对象可以拖放:图像和某些文本.并且在IE4中唯一有效的放置目标是文本框.到了IE5.5,拖放功能得到了扩展,让网页中的任何元素都可以拖放.最终HTML5以IE的实力为基础制定了拖放规范.FF3.5+,Safari3+和Chrome根

Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源代码

在android学习中,动作交互是软件中重要的一部分.当中的Scroller就是提供了拖动效果的类,在网上.比方说一些Launcher实现滑屏都能够通过这个类去实现.以下要说的就是上次Scroller类学习的后的实践了. 假设你还不了解Scroller类,那请先点击:Android 界面滑动实现---Scroller类 从源代码和开发文档中学习(让你的布局动起来) 了解之后再阅读下面内容.你会发现原来实现起来非常easy. 之前说到过.在广泛使用的側边滑动导航开源库 --SlidingLayer

安卓触摸事件的分发,处理和消费,以及实现图片的拖动效果

Touch事件分发中只有两个主角:ViewGroup和View.Activity的Touch事件事实上是调用它内部的ViewGroup的Touch事件,可以直接当成ViewGroup处理. View在ViewGroup内,ViewGroup也可以在其他ViewGroup内,这时候把内部的ViewGroup当成View来分析. ViewGroup的相关事件有三个:onInterceptTouchEvent.dispatchTouchEvent.onTouchEvent.View的相关事件只有两个:

vc++ mfc中拖动效果的实现 借助于CImageList

拖动是界面编程频繁使用的一个效果,在windows系统下可谓大行其道.纵观时下的应用软件几乎各个都支持各种各样拖动的效果,windows7更是把拖动做到了极致.其实说起来拖动的实现也很简单,对于有句柄的对象都可以通过MoveWindow或SetWindowPos实现位置变动,而没有句柄的对象实现拖动无非就是做些参数修改,说到底实现拖动就是在OnLButtonDown.OnMouseMove和OnLButtonUp中处理数据,当然你可以使用鼠标右键甚至中建消息来实现,基本原理是一样的.     

js 实现win7任务栏拖动效果

前言 在某个时刻, 我认识了一个朋友. 此人在我的教唆下, 踏上了js的不归路. 前天他问我, Win7任务栏拖动效果怎么实现. 我随口就跟他说, 这简单的一逼. 在我一晚上的折腾之后, 一份潦草的代码总算实现了功能. PS: 我是搞C++的, js略懂一二.. 源码 话不多说, 上源码. 1 // 常量 2 var CELL_WIDTH = 100; 3 var CELL_HEIGHT = 50; 4 5 var Utils = { 6 pixelToInt: function(str) 7

Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源码

在android学习中,动作交互是软件中重要的一部分,其中的Scroller就是提供了拖动效果的类,在网上,比如说一些Launcher实现滑屏都可以通过这个类去实现.下面要说的就是上次Scroller类学习的后的实践了. 如果你还不了解Scroller类,那请先点击:Android 界面滑动实现---Scroller类 从源码和开发文档中学习(让你的布局动起来) 了解之后再阅读以下内容,你会发现原来实现起来很简单. 之前说到过,在广泛使用的侧边滑动导航开源库 --SlidingLayer其实就是