javascript - 想要实现元素拖动效果,但是一拖动出现禁止的图标
PHP中文网
PHP中文网 2017-04-11 12:36:23
[JavaScript讨论组]

用jQuery实现可用鼠标创建窗口,用鼠标对窗口进行拖动。
https://jsfiddle.net/r4x1toz3/7/
但是有两个问题不知道怎么解决:
1、创建完元素,,文字会呈被选中状态,每创建一个窗口,所有窗口都会变成选中状态(实际上我没有实现这个,不知道怎么会有这种效果)

2、对元素进行拖动,但实际上拖动会出现禁止的图标,需要点击一下元素才能进行拖动

3、有的时候会莫名的卡?例如创建好窗口(即松开鼠标)窗口大小还会跟着鼠标动;拖动窗口放开鼠标,窗口位置还会跟着鼠标移动?

js代码:

;(function(){
    function SmartWin(area){
        var _this=this;
        this.area=area;//窗口绘制区域
        this.dragging=false;//是否拖动
        this.startX,this.startY;//鼠标按下时的位置,相对于文档
        this.posX,this.posY;//窗口拖动前的位置,相对于父元素
        this.diffX,this.diffY//鼠标与窗口的差值
        this.hasWin=false;
        this.focusWin;
        this.stauts;
        //area相对于文档的位置
        this.aLeft=this.area.offset().left;
        this.aTop=this.area.offset().top;

        //鼠标按下
        this.area.mousedown(function(e){
            //无窗口,准备创建新窗口
            if($(e.target).is(_this.area)){
                _this.startX=e.pageX;
                _this.startY=e.pageY;
                _this.stauts="create";
                var inner='

\

窗口名称×

\

\

'; _this.area.append(inner); var wl=_this.startX-_this.aLeft; var wt=_this.startY-_this.aTop; $("#createWin").css({ "left":wl, "top":wt }) } //有窗口 else{ //关闭窗口 if($(e.target).hasClass("smartWin")){ _this.focusWin=$(e.target); }else{ _this.focusWin=$(e.target).parents(".smartWin"); } if($(e.target).hasClass("close")){ } //修改大小 else if($(e.target).hasClass("resize")){ } //拖动窗口 else{ _this.posX=_this.focusWin.position().left; _this.posY=_this.focusWin.position().top; var zindex=$(".smartWin").length-1; _this.focusWin.css("zIndex",zindex); //差值 _this.diffX=e.pageX-_this.aLeft-_this.posX; _this.diffY=e.pageY-_this.aTop-_this.posY; _this.stauts="drag"; _this.focusWin.attr("id","dragWin"); } } //改变窗口大小 if($(e.target).hasClass("resize")){ _this.stauts="resize" e.stopPropagation(); } }) //鼠标移动 this.area.mousemove(function(e){ //设置窗口大小位置 if(_this.stauts=="create"){ var ww=e.pageX-_this.startX; var wh=e.pageY-_this.startY; $("#createWin").css({ "width":ww, "height":wh }) }else if(_this.stauts=="drag"){ console.log(555); var wl=e.pageX-_this.aLeft-_this.diffX; var wt=e.pageY-_this.aTop-_this.diffY; $("#dragWin").css({ "left":wl, "top":wt }) } }) $(document).mouseup(function(){ _this.stauts=""; _this.dragging=false; _this.focusWin=null; var cwin=$("#createWin"); var dwin=$("#dragWin"); if(cwin){ cwin.removeAttr("id"); } if(dwin){ dwin.removeAttr("id"); } }) } SmartWin.init=function(objs){ objs.each(function(){ new SmartWin($(this)); }) } window["SmartWin"]=SmartWin; })()
PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
PHP中文网

谢邀,有点乱,最好提供一个在线DEMO,大概了解,只能回答你其中两个问题:

1、选中问题,应该是你在 mousedown 按下的时候会去创建一个 smartWin,如果你不离开,自然会被选中的,所以最好的是在初始化的时候就判断是否需要创建。

2、卡顿的原因我想应该是 mousemove 事件冒泡了吧,可以将这里改成 $(document) 可以解决这个问题。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号