html添加鼠标右键菜单,Fabric.js - 添加鼠标右键点击事件响应(附:右键菜单)...
Fabric.js的 Canvas有个mouse:down 事件,通过它我们可以监听到鼠标按下的行为。不过该事件只对鼠标左键其作用,如果是右键按下则不会触发该事件。
而 Canvas上又无法直接监听 contextmenu事件,所以想要实现右键点击响应就需要换种方式实现。
1,实现原理
Fabric.js 的 Canvas初始化完毕后,会自动在其上方覆盖一个 class名为upper-canvas的 canvas。
我们可以在上层这个 canvas上添加 contextmenu事件监听。当右键按下时会触发该事件,然后将点击的坐标转换成底下实际的 canvas里的坐标(坐标需要转换是因为下面 canvas 可能会被移动,缩放)。
2,效果图
默认情况下,鼠标左键点击对象即可选择中该对象。
这里增加个右键选中功能,即通过右键同样可以选中对象。
3,样例代码
canvas {
border: 1px dashed black;
}
var canvas;
window.onload = function() {
canvas = new fabric.Canvas('canvas');
var rect1 = new fabric.Rect({top: 50, left: 50, width: 70, height: 70, fill: 'red'});
canvas.add(rect1);
var rect2 = new fabric.Rect({top: 50, left: 150, width: 70, height: 70, fill: 'red'});
canvas.add(rect2);
var rect3 = new fabric.Rect({top: 50, left: 250, width: 70, height: 70, fill: 'red'});
canvas.add(rect3);
//在canvas上层对象上添加右键事件监听
$(".upper-canvas").contextmenu(onContextmenu);
}
//右键点击事件响应
var onContextmenu = function(event) {
var pointer = canvas.getPointer(event.originalEvent);
var objects = canvas.getObjects();
for (var i = objects.length - 1; i >= 0; i--) {
var object = objects[i];
//判断该对象是否在鼠标点击处
if (canvas.containsPoint(event, object)) {
//选中该对象
canvas.setActiveObject(object);
}
}
//阻止系统右键菜单
event.preventDefault();
return false;
}
附:添加一个自定义的右键菜单
1,实现原理
这里我们使用一个专门的第三方菜单组件(contextMenu)来实现,在上面的右键点击响应中将菜单弹出即可。
2,效果图
(1)当鼠标在对像上按下右键时,会出现个菜单。
(2)点击菜单里的“删除”项,即可将对象删除。
3,样例代码
canvas {
border: 1px dashed black;
}
var canvas;
//菜单项
var contextMenuItems;
window.onload = function() {
canvas = new fabric.Canvas('canvas');
var rect1 = new fabric.Rect({top: 50, left: 50, width: 70, height: 70, fill: 'red'});
canvas.add(rect1);
var rect2 = new fabric.Rect({top: 50, left: 150, width: 70, height: 70, fill: 'red'});
canvas.add(rect2);
var rect3 = new fabric.Rect({top: 50, left: 250, width: 70, height: 70, fill: 'red'});
canvas.add(rect3);
//在canvas上层对象上添加右键事件监听
$(".upper-canvas").contextmenu(onContextmenu);
//初始化右键菜单
$.contextMenu({
selector: '#contextmenu-output',
trigger: 'none',
build: function($trigger, e) {
//构建菜单项build方法在每次右键点击会执行
return {
callback: contextMenuClick,
items: contextMenuItems
};
},
});
}
//右键点击事件响应
function onContextmenu(event) {
var pointer = canvas.getPointer(event.originalEvent);
var objects = canvas.getObjects();
for (var i = objects.length - 1; i >= 0; i--) {
var object = objects[i];
//判断该对象是否在鼠标点击处
if (canvas.containsPoint(event, object)) {
//选中该对象
canvas.setActiveObject(object);
//显示菜单
showContextMenu(event, object);
continue;
}
}
//阻止系统右键菜单
event.preventDefault();
return false;
}
//右键菜单项点击
function showContextMenu(event, object) {
//定义右键菜单项
contextMenuItems = {
"delete": {name: "删除", icon: "delete", data: object},
};
//右键菜单显示位置
var position = {
x: event.clientX,
y: event.clientY
}
$('#contextmenu-output').contextMenu(position);
}
//右键菜单项点击
function contextMenuClick(key, options) {
if(key == "delete") {
//得到对应的object并删除
var object = contextMenuItems[key].data;
canvas.remove(object);
}
}
html添加鼠标右键菜单,Fabric.js - 添加鼠标右键点击事件响应(附:右键菜单)...相关推荐
- Fabric.js添加辅助线的方法
Fabric.js高级点的教程1–添加辅助线的方法 Fabric.js添加辅助线的方法 Fabric.js 非常的强大,但是国内的资源教程很少,最近想加个功能给元素添加辅助参考线(类似 演示 ).这样 ...
- js自动触发点击事件
js自动触发点击事件 // 进入页面立即触发(()=>{// 兼容IEif(document.all) {document.getElementById("aid").cli ...
- Android点击事件、下拉菜单、单选框实例
Android点击事件.下拉菜单.单选框实例 点击事件 1.ClickActivity.java import android.app.Activity; import android.os.Bund ...
- 获取js里添加的css文件,用JS添加一个css文件
我在这里发现了一些关于我的问题的问题,但我无法使用它. 通过JS点击它们时我会改变的CSS属性,JQuery的用JS添加一个css文件 Green Red /*$(document).ready(fu ...
- 动态二级下拉菜单html,js实现简洁大方的二级下拉菜单效果代码
本文实例讲述了js实现简洁大方的二级下拉菜单效果代码.分享给大家供大家参考.具体如下: 这是一款简洁大方的二级下拉菜单,菜单的颜色自己根据需要重新定义吧,这里仅给大家提供一种制作二级菜单的思路,整体效 ...
- win10鼠标灵敏度怎么调_Win10系统鼠标右键点击没有任何反应怎么解决?
Win10系统鼠标右键没有反应怎么办?今天一个用户在使用Win10系统电脑的时候,突然出现鼠标右键点击没有任何反应的问题,这是怎么回事?是鼠标坏了吗?下文就给大家详细分析可能的原因及其解决办法. 一. ...
- js input点击事件_Vue.js的旅程,简单的todo实例「602」
对vue没有一丝了解的朋友可以看我的文章601Vue.js的旅程,初步认识Vue.js「601」. 这回我们做一个网上很多练习用的todo实例. 更多文章请关注我的头条号. 一.我们开始吧,先链接vu ...
- android app 主界面,android ViewPager实现App主界面Tab菜单页面切换和点击事件
Tabhost实现页面滑动切换比较麻烦,这里介绍一下viewPage 控件. 实现了三屏滑动带标题点击和tab页面内按钮的的点击事件实现: viewPage 的优点是可以滑动切换缺点是MainAct ...
- html 记录点击次数,jquery/js记录点击事件,单击次数加一,双击清零
目的:点击按钮,点击后在网页上显示点击次数,双击清零 实现:js或者jquery 代码如下: pageEncoding="utf-8"%> 点击事件 window.onloa ...
- JS的点击事件 onclick
onclick 点击事件 onclick 以文字de放大与缩小为实例 嗨- 各位小可爱们,我们又见面了 先来了解一下定义和用法 onclick 属性在单击鼠标时触发. 记住是 单击单击单击!!! 只点 ...
最新文章
- 数据中台已成气候!大数据架构师如何站上风口?
- 数据分析显示,疫情下数据科学家的薪水几乎未受影响
- CentOS+Nginx+Tomcat+Mysql+PHP 环境搭建及系统部署
- Oracle删库跑路
- 简述hdfs工作原理_hdfs工作机制和原理 简述hdfs的原理
- 【Julia】Julia使用Pkg下载镜像配置问题解决方案
- 【翻译】Sencha Cmd中脚本压缩方法之比较
- kotlin运行_Kotlin允许,运行,也适用于
- 欧姆龙plc学习笔记(六)(从cx-one上传程序到欧姆龙plc)
- (模电笔记二 By Multisim)波特图(Bode Plotter)幅频特性相频特性详解
- 用ArcGIS提取HWSD中的土壤单一属性数据
- 什么是一级域名、二级域名?
- 两年数据对比柱形图_视频教程:堆积柱形图的几种变化形式
- web网页设计期末课程大作业 基于HTML+CSS+JavaScript响应式环保科技公司网站模板(环保主题网站设计)
- 一个女留学生在美国的七年
- aid learning安装应用_Aid Learning
- 肉蛋堡记 - 符皓冉
- 关于录制短视频点播不能播放问题的总结
- 常微分方程数值解法1
- 我作为大学生刚出校园实习的感受
热门文章
- 支付系列-对接支付宝支付
- 这些行业高薪职位最多
- 多媒体(流媒体)技术领域及开源系统,媒体库数据如音乐、图片问题等-(图像,音视频)
- 100流明相当于多少w_GE的50W卤素灯光通量标明1500流明实际有这么高吗换几W的LED灯较合适...
- python用爬虫实现抢票_PythonGUI+爬虫-从零打造12306抢票软件价值1680元
- 最详细、最全面的【Java日志框架】介绍,建议收藏,包含JUL、log4j、logback、log4j2等所有主流框架
- 电脑重装系统后文件怎么恢复
- 保姆级教学:手把手教你如何分析研报!
- 使用hexo+gitee免费搭建个人博客全网最详细
- 大话谈VUE之export const