美文网首页
jQuery插件小结

jQuery插件小结

作者: 想个名字真难ing | 来源:发表于2017-03-11 15:17 被阅读0次

虽然现如今vue、angular等的框架大行其道,但是jQuery依然还是日常开发非常常用的,而其中插件又是爱不释手的,今天简单来看一下如何封装一个简单的插件。

核心语法

<pre>

<script>
//定义好一个插件
$.fn.extend({
toRed(){
this.css(background:'red')
//这个方法被谁引用,this就是指被引用的jQuery对象
}
})
//下面开始引用插件
$(function(){
$('div').toRed();
})
</script>
<body>
<div></div>
</body>
</pre>
1.一个拖拽案例
<pre>
<script>
$.fn.extend({
drag(){
//this在这里表示被外面哪一个元素引用的jQuery对象
let oDiv=this;
oDiv.on('mousedown',function(ev){
let disx=ev.clientX-oDiv.offset().left;
let disy=ev.clientY-oDiv.offset().top;

                function fnMove(ev){
                    let l=ev.clientX-disx;
                    let t=ev.clientY-disy;
                    
                    oDiv.css({
                        left:l+'px',
                        top:t+'px'
                    })
                    return false;
                }
                function fnUp(){
                    $(document).off('mousemove',fnMove);
                    $(document).off('mouseup',fnUp);
                }
                $(document).on('mousemove',fnMove);
                $(document).on('mouseup',fnUp);
                
            })
            }
        })
       //在这里引用插件中封装好的drag方法
        $(function(){
            $('div').drag();
        })
    </script>
<body>
    <div id="div"></div>
</body>

</script>
</pre>

2.一个可以传参数的拖拽
defaultConfig,当中可以设置任意参数。el代表可以进行拖拽哪个元素,还有距离四个方向的距离,如果不传递那么就是默认的。
<pre>
<script>
$.fn.extend({
drag(options){
let oDiv=this;
let defaultConfig={
el:oDiv,
left:0,
top:0,
right:document.documentElement.clientWidth,
bottom:document.documentElement.clientHeight
}
//这里需要将外部传递的参数和这里默认的值进行校验
let config=$.extend(defaultConfig,options);
let el;
//判断是否传递控制哪一个元素,如果不传默认是oDiv
if(typeof(config.el)=="string"){
el=oDiv.find(config.el);
}else{
el=oDiv;
}
el.on('mousedown',function(ev){
let disx=ev.clientX-el.offset().left;
let disy=ev.clientY-el.offset().top;

                function fnMove(ev){
                    let l=ev.clientX-disx;
                    let t=ev.clientY-disy;
                    if(l<config.left){
                        l=config.left;
                    }
                    if(l>config.right-oDiv.outerWidth()){
                        l=config.right-oDiv.outerWidth();
                    }
                    if(t<config.top){
                        t=config.top;
                    }
                    if(t>config.bottom){
                        t=config.bottom-oDiv.outerHeight();
                    }
                    oDiv.css({
                        left:l+'px',
                        top:t+'px'
                    })
                    return false;
                }
                function fnUp(){
                    $(document).off('mousemove',fnMove);
                    $(document).off('mouseup',fnUp);
                }
                $(document).on('mousemove',fnMove);
                $(document).on('mouseup',fnUp);
                
            })
            }
        })
        $(function(){

//直接引用,并且传递了四个参数,代表了只有在span元素上的拖拽才会生效,并且限制div元素的四个最大方向
$('div').drag({
el:'span',
right:600,
left:50,
bottom:600
});
})
</script>
</head>
//当然这里的div都没有设置样式,还须自己设置,span标签可以随意设置任何标签
<body>
<div id="div">
<span></span>
</div>
</body>
</pre>

相关文章

网友评论

      本文标题:jQuery插件小结

      本文链接:https://www.haomeiwen.com/subject/ltlagttx.html