这段代码有问题。在 div 上鼠标按下后, map 在 Firefox 上并没有立即变为“不可拖动”,但在 Chrome 上是可以的。
google.maps.event.addDomListener(div,'mousedown',function(e) {
console.log("draggable START ", map.get('draggable') );
map.set('draggable', false);
console.log("draggable END", map.get('draggable') );
google.maps.event.trigger(map, 'resize');
});
这是一个 fiddle https://jsfiddle.net/benderlio/njyeLujs/
FF版本是54.0.1 windows 10 在 chrome 上,鼠标在白框上按下后 map 不可拖动,但在 FF 上,您可以在鼠标按下时移动 map 和白框
谢谢。
最佳答案
它似乎阻止您在 mousedown 或 mouseup 上设置可拖动其他功能(例如警报等)工作正常。由于 draggable 仅在鼠标按下时才处于事件状态,因此您可以使用 mouseover/mouseout 来解决此错误。以下在 firefox 54.0.1 中运行良好
var map, dragtoggle = true, div;
function initMap() {
directionsService = new google.maps.DirectionsService();
directionsDisplay = new google.maps.DirectionsRenderer();
map = new google.maps.Map(document.getElementById('map'), {
center: {
lat: 42.418664992,
lng: -71.104832914
},
zoom: 13,
});
//creating the class to exntend the google map OverlayView class
function MapLocationIcon(id,lat,lng,title,icon_class){
this.lat = lat;
this.lng = lng;
this.title = title; //eg. A,B,C.D
this.icon_class= icon_class; //the position of the spritesheet for the icon background
this.pos = new google.maps.LatLng(lat,lng);
}
//make a copy of the OverlayView to extend it
MapLocationIcon.prototype = new google.maps.OverlayView();
MapLocationIcon.prototype.onRemove= function(){}
//prepare the overlay with DOM
MapLocationIcon.prototype.onAdd= function(){
div = document.createElement('DIV');
function toggleDrag(){
if(dragtoggle == true){
map.set('draggable', false);
google.maps.event.trigger(map, 'resize');
dragtoggle = false;
} else if(dragtoggle == false){
map.set('draggable', true);
google.maps.event.trigger(map, 'resize');
dragtoggle = true;
}
}
function DragSwitch(){
$(div).css( "cursor", "auto");
dragtoggle = "disabled";
}
div.addEventListener('mouseover',toggleDrag,false);
div.addEventListener('mouseout',toggleDrag,false);
div.addEventListener('mousedown',DragSwitch,false);
$(div).addClass('map_icon').addClass(this.icon_class);
$(div).css( "background-color","white");
$(div).css( "width","200px");
$(div).css( "height","200px");
$(div).css( "cursor", "grab");
$(div).text(this.title);
var panes = this.getPanes();
panes.overlayImage.appendChild(div);
/*
google.maps.event.addDomListener(div,'mouseover',function(e) {
map.set('draggable', false);
console.log("draggable START ", map.get('draggable') );
});
google.maps.event.addDomListener(div,'mouseout',function(e) {
map.set('draggable', true);
console.log("draggable START ", map.get('draggable') );
});
*/
}
//set position
MapLocationIcon.prototype.draw = function(){
var overlayProjection = this.getProjection();
var position = overlayProjection.fromLatLngToDivPixel(this.pos);
var panes = this.getPanes();
panes.overlayImage.style.left = position.x + 'px';
panes.overlayImage.style.top = position.y - 30 + 'px';
}
//to use it
var icon = new MapLocationIcon('id', 42.418664992,-71.104832914, 'AAA', 'gold');
icon.setMap(map);
}
$("body").on("click", "#dis", function() {
map.setOptions({draggable: false});
dragtoggle = "disabled";
$(div).css( "cursor", "auto");
});
$("body").on("click", "#en", function() {
map.setOptions({draggable: true});
dragtoggle = true;
$(div).css( "cursor", "grab");
});
google.maps.event.addDomListener(window, 'load', initMap);
关于javascript - google.maps.event.addDomListener mousedown 在 Firefox 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45126498/
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
我正在使用Watir运行一个Ruby脚本来为我自动化一些事情。我试图自动将一些文件保存到某个目录。因此,在我的Mozilla设置中,我将默认下载目录设置为桌面并选择自动保存文件。但是,当我开始运行我的脚本时,这些更改并没有反射(reflect)出来。似乎首选项恢复为默认值。我已经包括以下内容require"rubygems"#Optional.require"watir-webdriver"#Forwebautomation.require"win32ole"#Forfilesavedialog.并打开一个新的firefox实例:browser=Watir::Browser.new(:
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我需要从json记录中获取一些值并像下面这样提取curr_json_doc['title']['genre'].map{|s|s['name']}.join(',')但对于某些记录,curr_json_doc['title']['genre']可以为空。所以我想对map和join()使用try函数。我试过如下curr_json_doc['title']['genre'].try(:map,{|s|s['name']}).try(:join,(','))但是没用。 最佳答案 你没有正确传递block。block被传递给参数括号外的方法
很高兴看到google代码:google-api-ruby-client项目,因为这对我来说意味着Ruby人员可以使用GoogleAPI-s来完善代码。虽然我现在很困惑,因为给出的唯一示例使用Buzz,并且根据我的实验,Google翻译(v2)api的行为必须与google-api-ruby-client中的Buzz完全不同。.我对“Explorer”演示示例很感兴趣——但据我所知,它并不是一个探索器。它所做的只是调用一个Buzz服务,然后浏览它已经知道的关于Buzz服务的事情。对我来说,Explorer应该让您“发现”所公开的服务和方法/功能,而不一定已经知道它们。我很想听听使用这个
Enumerable#each和Enumerable#map的区别在于返回的是接收者还是映射后的结果。回到接收者是微不足道的,你通常不需要在each之后继续一个方法链,比如each{...}.another_method(我可能没见过这样的案例。即使你想回到接收者那里,你也可以通过tap来实现)。所以我认为所有或者大部分使用Enumerable#each的情况都可以用Enumerable#map代替。我错了吗?如果我是对的,each的目的是什么?map是否比each慢?编辑:我知道当您对返回值不感兴趣时使用each是一种常见的做法。我对这种做法是否存在不感兴趣,但感兴趣的是,除了从
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
map遍历数组是否比each更快?两者有速度差异吗?mapresult=arr.map{|a|a+2}每个result=[]arr.eachdo|a|result.push(a+2)end 最佳答案 我认为是的。我试过这个测试require"benchmark"n=10000arr=Array.new(10000,1)Benchmark.bmdo|x|#Mapx.reportdon.timesdoresult=arr.map{|a|a+2}endend#Eachx.reportdon.timesdoresult=[]arr.each
我有一堆要清理的URL。它们都包含UTM参数,在这种情况下不是必需的,或者是有害的。示例:http://houseofbuttons.tumblr.com/post/22326009438?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+HouseOfButtons+%28House+of+Buttons%29所有可能的参数都以utm_开头。如何使用ruby脚本/结构轻松删除它们而不破坏其他潜在的“好”URL参数? 最佳答案 您可以将正则表达式应用于url以清
我想念Ruby中的Hash方法来仅转换/映射散列值。h={1=>[9,2,3,4],2=>[6],3=>[5,7,1]}h.map_values{|v|v.size}#=>{1=>4,2=>1,3=>3}你如何在Ruby中归档它?更新:我正在寻找map_values()的实现。#moreexamplesh.map_values{|v|v.reduce(0,:+)}#=>{1=>18,2=>6,3=>13}h.map_values(&:min)#=>{1=>2,2=>6,3=>1} 最佳答案 Ruby2.4引入了方法Hash#tran