div拖拽插件——JQ.MoveBox.js(JQ插件学习)

有一段时间没更新博客了,都不知道忙些什么,学习也没什么进展,惭愧。

这一周空闲的时间学着自己写一下JQ插件。

以前用原生的JS做过类似拖拽div的效果,现在按原思路改做成一个JQ的小插件,当作制作JQ插件的一个小练习。

(LYQ:经本人测试此代码真实有效,效果为2款方块,一款出格另一款不出格)

html为

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312" />
<title></title>
<style type="text/css">
*{margin:0;padding:0;}
#box{width:500px;height:500px;margin:200px auto;position:relative;border:1px solid #ccc;border-left:2px solid #ccc;}
.float-box{width:100px;height:100px;background:#000;color:#fff;position:absolute;top:20px;left:10px;cursor:move;z-index:2;border:2px solid #ccc;border-right:10px solid #fc0;}
.float-box1{width:200px;height:200px;background:#f30;color:#fff;position:absolute;top:0;left:200px;cursor:move;border-top:10px solid #000;}
</style>
</head>
<body>
<div id="box">
    <div class="float-box"></div>
    <div class="float-box1"></div>
</div>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="JQ.MoveBox.js"></script>
<script type="text/javascript">
$(".float-box").MoveBox();
$(".float-box1").MoveBox({out:true});
</script>
</body>
</html>

下面为JQ.MoveBox.js

(function($){
    var n = 1;
    var o = {}
    $.fn.MoveBox=function(options){
        var opts = $.extend({}, $.fn.MoveBox.defaults, options);
        return this.each(function(i){
            $(this).mousedown(function(e){
                o.iTop = $(this).position().top - e.pageY;
                o.iLeft = $(this).position().left - e.pageX;
                n++;
                $this = $(this);
                $this.css({'z-index':n});

                $(document).bind("mousemove",function(e){
                    var iLeft = e.pageX + o.iLeft;
                    var iTop = e.pageY + o.iTop;
                    if(opts.out){
                        if(iLeft<-$this.parent().offset().left-parseInt($this.parent().css("border-left-width"))){
                            iLeft = -$this.parent().offset().left-parseInt($this.parent().css("border-left-width"));
                        }else if(iLeft>$(document).width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"))-$this.parent().offset().left-parseInt($this.parent().css("border-left-width"))){
                            iLeft = $(document).width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"))-$this.parent().offset().left-parseInt($this.parent().css("border-left-width"));
                        }
                        
                        if(iTop<-$this.parent().offset().top-parseInt($this.parent().css("border-top-width"))+$(document).scrollTop()){
                            iTop = -$this.parent().offset().top-parseInt($this.parent().css("border-top-width"))+$(document).scrollTop();
                        }else if(iTop>$(window).height()+$(document).scrollTop()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"))-$this.parent().offset().top-parseInt($this.parent().css("border-top-width"))){
                            iTop = $(window).height()+$(document).scrollTop()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"))-$this.parent().offset().top-parseInt($this.parent().css("border-top-width"));
                        }
                    }else{
                        if(iLeft<0){
                            iLeft = 0;
                        }else if(iLeft>$this.parent().width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"))){
                            iLeft = $this.parent().width()-$this.width()-parseInt($this.css("border-left-width"))-parseInt($this.css("border-right-width"));
                        }
                        
                        if(iTop<0){
                            iTop = 0;
                        }else if(iTop>$this.parent().height()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"))){
                            iTop = $this.parent().height()-$this.height()-parseInt($this.css("border-top-width"))-parseInt($this.css("border-bottom-width"));
                        }
                    }
                    
                    $this.css({
                        'left':iLeft +"px",
                        'top':iTop + "px"
                    }) 
                });
                
                $(document).bind("mouseup",function(){
                    $(document).unbind("mousemove");
                    $(document).unbind("mouseup");
                });
                
            });
        });
        
    };
    
    
    $.fn.MoveBox.defaults = {    
        out:false   //默认不可跑出线外
    }; 
    
})(jQuery);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Glider.js是一个高性能轻量级零依赖的轮播图组件,适用于移动端和桌面端。它具有以下特点: 1. 零依赖:不依赖任何第三方库,代码量小,易于维护。 2. 高性能:使用原生JavaScript实现,运行速度快,不会影响网页加载速度。 3. 支持响应式布局:自动适应不同的屏幕尺寸。 4. 支持无限循环:可以无限循环播放轮播图。 5. 支持滑动手势:支持手势切换轮播图。 使用Glider.js可以快速实现轮播图功能。下面是一个简单的示例: 首先,在HTML中引入Glider.js的CSS和JavaScript文件: ```html <link rel="stylesheet" href="glider.css"> <script src="glider.js"></script> ``` 然后,在HTML中创建一个包含轮播图的容器: ```html <div class="glider"> <div class="glider-track"> <div class="glider-slide">Slide 1</div> <div class="glider-slide">Slide 2</div> <div class="glider-slide">Slide 3</div> </div> </div> ``` 最后,在JavaScript中初始化Glider.js: ```javascript new Glider(document.querySelector('.glider'), { slidesToShow: 1, dots: '.dots', draggable: true, arrows: { prev: '.glider-prev', next: '.glider-next' } }); ``` 以上代码中,slidesToShow表示每次显示几张图片,dots表示是否显示小圆点,draggable表示是否支持手势滑动,arrows表示是否显示左右箭头。 通过上述简单的代码示例,你可以快速实现一个轮播图,并且Glider.js具有更多的配置项和API,可以满足各种不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值