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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int