jquery-ui中div拖动出现辅助线方便对齐

2023-10-31 15:50

本文主要是介绍jquery-ui中div拖动出现辅助线方便对齐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先上效果:


代码说明:

html部分:

<!--需要拖动的div-->

<div class="draggable">第一个11111111111111div</div>

<div class="draggable">第二个22div</div>

<div class="draggable">第三个333333div</div>

<div class="draggable">第四个ggdgdgdiv</div>

<div class="draggable">第五个div</div>

<div class="draggable">第六个div</div>

<!--拖动辅助线-->

<div id="guide-h" class="guide"></div>

<div id="guide-v" class="guide"></div>

css部分:

body{

    font-family: courier new, courier; 

    font-size: 12px; 

}

.draggable{

    border: 1px solid #ccc; 

    display: inline-block; 

    cursor: move;

    position: absolute;         

}

.guide{

    display: none; 

    position: absolute; 

    left: 0; 

    top: 0; 

}

#guide-h{

    border-top: 1px dashed #55f; 

    width: 100%; 

}

#guide-v{

    border-left: 1px dashed #55f; 

    height: 100%; 

}

js拖动部分:

/**

 * 指标拖动辅助标线

 * @author sdj

 */

var MIN_DISTANCE = 8; //捕获的最小距离

var guides = []; // 没有可用的引导 

var innerOffsetX, innerOffsetY;  


$(".draggable").draggable({

start: function( event, ui ) {

guides = $.map( $(".draggable").not( this ), computeGuidesForElement );

//offsetX、offsetY:源元素(srcElement)的X,Y坐标

innerOffsetX =  event.offsetX;

innerOffsetY = event.offsetY;

}, 

/**

* 参数说明

* @param event

* @param ui

*  event事件的 

* offsetX:

* outerwidth: 属性是一个只读的整数,声明了整个窗口的宽度。

*  outerheight: 属性是一个只读的整数,声明了整个窗口的高度。

*/

drag: function( event, ui ){

//迭代所有的guids,记住最近的h和v guids

var guideV, guideH, distV = MIN_DISTANCE+1, distH = MIN_DISTANCE+1, offsetV, offsetH; 

var chosenGuides = { top: { dist: MIN_DISTANCE+1 }, left: { dist: MIN_DISTANCE+1 } }; 

var $t = $(this); 

//pageX、pageY:文档坐标x、y ;

var pos = { top: event.pageY - innerOffsetY, left: event.pageX - innerOffsetX}; 

//outerHeight、outerWidth:整个浏览器的高度、宽度

var w = $t.outerWidth() - 1; 

var h = $t.outerHeight() - 1; 

var elemGuides = computeGuidesForElement( null, pos, w, h ); 

$.each( guides, function( i, guide ){

$.each( elemGuides, function( i, elemGuide ){

if( guide.type == elemGuide.type ){

var prop = guide.type == "h"? "top":"left"; 

var d = Math.abs( elemGuide[prop] - guide[prop] ); 

if( d < chosenGuides[prop].dist ){

chosenGuides[prop].dist = d; 

chosenGuides[prop].offset = elemGuide[prop] - pos[prop]; 

chosenGuides[prop].guide = guide; 

}

}

}); 

});

if( chosenGuides.top.dist <= MIN_DISTANCE ){

$( "#guide-h" ).css( "top", chosenGuides.top.guide.top ).show(); 

ui.position.top = chosenGuides.top.guide.top - chosenGuides.top.offset;

}

else{

$( "#guide-h" ).hide(); 

ui.position.top = pos.top; 

}

if( chosenGuides.left.dist <= MIN_DISTANCE ){

$( "#guide-v" ).css( "left", chosenGuides.left.guide.left ).show(); 

ui.position.left = chosenGuides.left.guide.left - chosenGuides.left.offset; 

}

else{

$( "#guide-v" ).hide(); 

ui.position.left = pos.left; 

}

}, 

stop: function( event, ui ){

$( "#guide-v, #guide-h" ).hide(); 

}

});


function computeGuidesForElement( elem, pos, w, h ){

    if( elem != null ){

        var $t = $(elem); 

//offset:返回当前元素 的偏移量

        pos = $t.offset();

        w = $t.outerWidth() - 1; 

        h = $t.outerHeight() - 1; 

    }

    

    return [

        { type: "h", left: pos.left, top: pos.top }, //垂直方向左下对齐线

        { type: "h", left: pos.left, top: pos.top + h }, 

        { type: "v", left: pos.left, top: pos.top }, 

        { type: "v", left: pos.left + w, top: pos.top },

        //您可以添加_any_其他指南在这里就好了(如指南10像素单元的左)

        { type: "h", left: pos.left, top: pos.top + h/2 },

        { type: "v", left: pos.left + w/2, top: pos.top } 

    ]; 

}

代码处理完成,复制代码即可用。(需要引入jquery-ui.min.js)希望可以帮到大家!!!!


这篇关于jquery-ui中div拖动出现辅助线方便对齐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/316423

相关文章

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript