不确定 FabricJS,但可能是这样的:
-
让它像第一个视频中一样工作:
通过使用 CSS cursor 属性,使用 javascript 在 mousedown 和 mouseup 事件上切换它。
-
事件处理程序使用事件(防止上下文菜单出现,当用户释放鼠标右键时):
使用 javascript 我们在 contextmenu 事件上返回 false
代码: 有点问题 ( * )
使用 jQuery JS Fiddle 1
$('#test').on('mousedown', function(e){
if (e.button == 2) {
// if right-click, set cursor shape to grabbing
$(this).css({'cursor':'grabbing'});
}
}).on('mouseup', function(){
// set cursor shape to default
$(this).css({'cursor':'default'});
}).on('contextmenu', function(){
//disable context menu on right click
return false;
});
使用原始 javascript JS Fiddle 2
var test = document.getElementById('test');
test.addEventListener('mousedown', function(e){
if (e.button == 2) {
// if right-click, set cursor shape to grabbing
this.style.cursor = 'grabbing';
}
});
test.addEventListener('mouseup', function(){
// set cursor shape to default
this.style.cursor = 'default';
});
test.oncontextmenu = function(){
//disable context menu on right click
return false;
}
( * ) 问题:
上述 sn-ps 可以正常工作,但存在跨浏览器问题,如果您在 Firefox - 或 Opera 中检查上述小提琴 - 在签入时您会看到正确的行为Chrome 和 IE11 - 没有用 Edge 或 Safari 进行检查 - 我发现 Chrome 和 IE 不支持 grabbing 光标形状,所以在上面的代码 sn-ps 中,更改光标进入这个:
jQuery:$(this).css({'cursor':'move'});JS Fiddle 3
原始javascript:this.style.cursor = 'move';JS Fiddle 4
现在我们有了一个工作代码,但没有手形光标。但有以下解决方案:-
解决方案:
-
Chrome 和 Safari 支持带有 -webkit- 前缀的 grab 和 grabbing,例如:
$(this).css({'cursor': '-webkit-grabbing'});
但是您需要先进行浏览器嗅探,如果是 Firefox,则使用默认和标准代码,如果是 Chrome 和 Safari,则使用 -webkit- 前缀,这仍然会使 IE 退出游戏。
-
看看this example,用 Chrome、Safari、Firefox、Opera 和 IE 对其进行测试,您会发现cursor: url(foo.bar) 在所有浏览器中都有效并受支持。
Chrome、Safari、Firefox 和 Opera 显示黄色微笑图像smiley.gif,但 IE 显示红色球光标url(myBall.cur)。
所以我认为你可以利用这个,以及像这样的抓手图像
或者这个:
您可以在除支持.cur 的IE 之外的所有浏览器中使用类似上述的png 或gif 格式的图像,因此您需要找到一种方法将其转换为.cur。谷歌搜索显示convert image to cur的许多结果
请注意,尽管 cursor:url(smiley.gif),url(myBall.cur),auto; - 带有逗号分隔的后备支持,在上面显示的 W3Schools 示例中运行良好,我无法让它在 javascript 中以相同的方式工作,我尝试了$(this).css({'cursor': 'grabbing, move'});,但它没有用。
我也尝试将其作为 CSS 类进行
.myCursor{ cursor: grabbing, -webkit-grabbing, move; }
然后使用 jQuery $(this).addClass('myCursor'); 但也无济于事。
因此,无论您是采用第二种解决方案还是两种解决方案的混合修复,您仍然需要进行浏览器嗅探,this is my code 我已经使用过几次来检测浏览器,并且在本文发布时效果很好但您可能不需要“Mobile”和“Kindle”部分。
// Detecting browsers
$UA = navigator.userAgent;
if ($UA.match(/firefox/i)) {
$browser = 'Firefox';
} else if ($UA.indexOf('Trident') != -1 && $UA.indexOf('MSIE') == -1) {
$browser = 'MSIE';
} else if ($UA.indexOf('MSIE') != -1) {
$browser = 'MSIE';
} else if ($UA.indexOf('OPR/') != -1) {
$browser = 'Opera';
} else if ($UA.indexOf("Chrome") != -1) {
$browser = 'Chrome';
} else if ($UA.indexOf("Safari")!=-1) {
$browser = 'Safari';
}
if($UA.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Nokia|Mobile|Opera Mini/i)) {
$browser = 'Mobile';
}else if($UA.match(/KFAPWI/i)){
$browser = 'Kindle';
}
console.log($browser);
资源: