Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JointJS 拖动画布

JointJS 拖动画布

作者头像
路过君
发布于 2021-12-07 08:14:41
发布于 2021-12-07 08:14:41
2K00
代码可运行
举报
运行总次数:0
代码可运行

效果

画布外套一层画板和一层画框,拖动画布时让画板在画框中滚动

源码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="wrap" style="overflow: auto;height:300px;width:300px;background-color: darkgrey">
    <div id="board" style="padding:20px">
        <div id="paper"></div>
    </div>
</div>
<script>
	const paper = new joint.dia.Paper({...});
    ...
    const $PAPER = $("#paper"), $WRAP = $("#wrap");
    $PAPER.css('cursor', 'grab');
    // 通过jointjs点击事件绑定/解绑wrap的鼠标移动事件
    paper.on('blank:pointerdown', function (evt, x, y) {
        const originX = evt.offsetX,
            originY = evt.offsetY;
        $PAPER.css('cursor', 'grabbing');
        $WRAP.on('mousemove', function (evt) {
            let scrollLeft = $WRAP.scrollLeft() - (evt.offsetX - originX);
            let scrollTop = $WRAP.scrollTop() - (evt.offsetY - originY);
            scrollLeft = 0 > scrollLeft ? 0 : scrollLeft;
            scrollTop = 0 > scrollTop ? 0 : scrollTop;
            $WRAP.scrollLeft(scrollLeft).scrollTop(scrollTop);
        });
    });
    paper.on('blank:pointerup', function (evt, x, y) {
        $PAPER.css('cursor', 'grab');
        $WRAP.off('mousemove');
    });
</script>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
通过canvas画板学习PointerEvent、MouseEvent和TouchEvent
最近想开发个草稿纸功能, 所以学习了下canvas实现简单的画板功能, 但是我们知道在PC端我们可以用MouseEvent来监听我们的鼠标点按相关操作, 移动端可以使用TouchEvent来监听我们手指触摸相关操作, 所以我们做画板的时候要想兼顾鼠标点按和手指触摸就得写两套逻辑. 但是别忘了, 还存在PointerEventer, 它可以监听鼠标, 手指触摸以及触摸笔, 支持多点触控, 它还有个特殊的参数, 即压感, 在压感屏上可以获取获取压感笔的压感值, 只要根据压感值, 我们可以控制笔画的粗细
治电小白菜
2021/04/27
1.8K0
通过canvas画板学习PointerEvent、MouseEvent和TouchEvent
Fabric.js 使用图片遮盖画布(前景图)
在 《Fabric.js 使用纯色遮挡画布(前景色)》 中讲到使用纯色的方式遮盖画布。如果你的常见需要使用图片来遮盖的话,fabric.js 也提供了相应的属性来配置。
德育处主任
2022/09/23
1.9K0
Fabric.js 使用图片遮盖画布(前景图)
js实现简易拖拽
scrollWidth:对象的实际内容的宽度,不包括边线宽度 clientWidth:对象内容的可视区的宽度,不包括边线宽度 offsetWidth:对象整体的实际宽度,包括滚动条等边线
星辉
2019/01/15
6.5K0
(长文预警) 你还在烦工作中碰到的拖拽问题?一个框架jiejue
Sortable —是一个JavaScript库,用于在现代浏览器和触摸设备上对拖放列表进行重新排序。无需jQuery。支持Meteor,AngularJS,React,Polymer,Vue,Ember,Knockout和任何CSS库,例如Bootstrap
公众号---人生代码
2020/08/04
7.2K0
(长文预警) 你还在烦工作中碰到的拖拽问题?一个框架jiejue
原生 JS 手写一个优雅的图片预览功能,带你吃透背后原理
本文将用一个极简的例子详细讲解如何用原生JS一步步实现完整的图片预览和查看功能,无任何第三方依赖,兼容PC与H5,实现了触屏双指缩放等,干货满满。
茶无味的一天
2022/11/02
3.7K0
原生 JS 手写一个优雅的图片预览功能,带你吃透背后原理
HTML可拖动自定义弹出层
最近在进行web项目开发过程中,遇到了一个需求,就是需要弹出层可以用鼠标拖动。之前经常做的是弹出一个弹出层来提示用户信息或者是弹出一个弹出层进行登录,缺点是不能根据用户的视觉习惯定位他。下面我来介绍一个方法来解决这个问题。以下方法通过扩展jquery来进行开发。
OECOM
2020/07/02
2.7K0
【实例】调整区域大小&动态隐藏区域
实例参照地址:https://jsfiddle.net/381510688/fb6Lz9rm/
奋飛
2019/08/14
1.8K0
手写原生代码专题 | 简易手写画板(二)
如视频所示,在这个示例中,我们用到了画布 canvas 相关的知识,比如创建画布、画圆形、画直线的基础知识,有了这些基础后,我们就能轻松完成本示例,示例效果如下视频所示。
前端达人
2021/07/16
1.5K0
VScroll:基于Vue美化滚动条组件|vue.js自定义滚动条
VScroll 一款基于vue2.x构建的虚拟替代系统原生滚动条组件。支持自定义是否原生滚动条、自动隐藏、滚动条大小及颜色等功能。拥有完美顺滑的滚动体验!
andy2018
2020/12/01
20.1K1
VScroll:基于Vue美化滚动条组件|vue.js自定义滚动条
技术汇总:第七章:三种验证方式
第一种验证码  b.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7; IE=EDGE"> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <title>设置-个人信息</title> </head> <
Java廖志伟
2022/09/28
7050
技术汇总:第七章:三种验证方式
Fabric.js 居中元素 🎗️
阅读本文需要你有一定的 Fabric.js 基础,如果还不太了解 Fabric.js 是什么,可以阅读 《Fabric.js 从入门到膨胀》
德育处主任
2022/06/10
3.8K0
Fabric.js 居中元素 🎗️
【愚公系列】2022年12月 .NET CORE工具案例-滑块验证码和拼图验证功能实现
滑块验证码是一种很常见的行为验证码,用户只需要轻轻滑动滑块填充拼图,即可完成安全验证。通常包括触发式、嵌入式和弹出式三种形式。
愚公搬代码
2022/12/09
1.3K0
【愚公系列】2022年12月 .NET CORE工具案例-滑块验证码和拼图验证功能实现
低代码设计器的自由布局拖动的实现原理
大家好,我们在这篇文章中来分享一下自由布局拖动的实现原理,实现一个设计器组件自由拖动的最简demo。
zz_jesse
2021/12/06
4.7K0
低代码设计器的自由布局拖动的实现原理
vue使用canvas签名之PC端
在一些项目业务中,经常会使用到画板,让用户自己去写/画一些东西做标示,比如说在线签电子合约、签名等,如果不用插件,那么如何使用h5的canvas画布来实现这一需求呢?【本篇只讨论PC端,移动端期待下篇】
流眸
2020/02/14
1.5K0
vue使用canvas签名之PC端
EonerCMS——做一个仿桌面系统的CMS(四)
  一晃又过去一个多星期了,途中出了个差,进度上略有耽误,不过还好,上次有个话题没说完,这次继续,就是窗口拖动以及改变窗口尺寸。
胡尐睿丶
2022/03/23
5530
EonerCMS——做一个仿桌面系统的CMS(四)
使用 JavaScript 实现简单的拖拽
首先,对拖拽的元素绑定 mousedown 时间,使其触发对应的函数,获取元素与鼠标的位置。在 document 对象上绑定 mousemove 和 mouseup 事件,不在拖拽的元素上绑定是因为当鼠标移动太快而超出元素的范围时会停止拖拽,而绑定在 document 上则可以避免这样的事情发生。拖拽再快都不会超出 document 的范围。
ihoey
2018/10/31
1.6K0
js实现磁性吸附
磁性吸附 目录 代码实例 与限定范围拖拽的差异 下载源码链接 代码实例 * { padding: 0; margin: 0; } #box1 { width: 500px; height: 500px; background: #999; position: relative; left: 100px; top: 100px; } #box { width: 100px; height: 100px; bac
星辉
2019/01/15
2.6K0
js实现限定范围拖拽
限定范围拖拽 目录 代码实例 与简易拖拽的差异 下载源码链接 代码实例 * { padding: 0; margin: 0; } #box1 { width: 500px; height: 500px; background: #999; position: relative; left: 100px; top: 100px; } #box { width: 100px; height: 100px; bac
星辉
2019/01/15
4.6K0
Threejs入门之二十二:Threejs中的屏幕坐标转标准设备坐标
在上一节中,我们在监听鼠标移动事件时,将其坐标范围处理为了[-1,1]的范围,使用如下代码
九仞山
2023/04/30
2.4K0
Threejs入门之二十二:Threejs中的屏幕坐标转标准设备坐标
jquery智能弹出层,自己主动推断位置
<!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=utf-8″ /> <title>jquery弹出层浮动层代码</title> <script src=”/ajaxjs/jquery1.3.2.js” type=”text/javascript”></script> <style> *{ margin:0; padding:0} body{ margin:0; padding:0; font-size:12px} ul,li{ list-style:none} ul{position:relative;top:-3px; left:-3px;border:1px solid #ccc; background:#fff;} li{height:23px;line-height:23px;cursor:default; padding:0 0 0 10px} li.current{background:#eee} .wrap{ width:158px; background:#eee; position:absolute;} </style> <script type=”text/javascript”> $(function(){ $(“.wrap”).hide(); var objW=$(“.wrap”).width(); var objH=$(“.wrap”).height(); $(document).mousedown(function(e){ var selfX=objW+e.pageX; var selfY=objH+e.pageY var bodyW=document.documentElement.clientWidth+document.documentElement.scrollLeft; var bodyH=document.documentElement.clientHeight+document.documentElement.scrollTop; if(selfX>bodyW && selfY>bodyH){ $(“.wrap”).css({top:(bodyH-objH),left:(bodyW-objW)}).show(); }else if(selfY>bodyH){ $(“.wrap”).css({top:(bodyH-objH),left:e.pageX}).show(); }else if(selfX>bodyW){ $(“.wrap”).css({top:e.pageY,left:(bodyW-objW)}).show(); }else{ $(“.wrap”).css({top:e.pageY,left:e.pageX}).show(); } }) $(“li”).hover(function(){ $(this).addClass(“current”); },function(){ $(this).removeClass(“current”); }).click(function(){ alert($(this).text()) $(this).parent().parent().hide(); }) }) </script> </head> <body> <div style=”height:800px;width:900px”>&nbsp;</div> <div style=”position:absolute;top:300px;left:300px”><span style=”color:#f00;font-size:28px”>请按F5刷新,才干看到效果。</span><br>点击鼠标左键,弹出层,<br>在最右边点击时
全栈程序员站长
2022/07/11
2.5K0
相关推荐
通过canvas画板学习PointerEvent、MouseEvent和TouchEvent
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验