- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常具体的问题,我并不真正期望得到直接答案,但任何指导都会有所帮助。
简单明了,我想以编程方式在位于由 CartoDB 提供支持的 Leaflet map 上的标记上触发单击事件。我在 map 上有一个包含标记的图层,每个标记都有与其关联的单击事件。因此,本质上,我只需要找到标记并在其上触发单击事件。
就上下文而言,Mapbox 实际上就是这样做的,但不幸的是我不能使用 Mapbox 来实现这个特定的实现: https://www.mapbox.com/mapbox.js/example/v1.0.0/open-popup-externally/
我愿意接受建议,但最好,我想做一些类似于上面链接中的代码的事情——通过 javascript 询问 Leaflet 或 CartoDB,以通过自定义属性/lat-lng 查找和访问标记/??。我认为从那里开始就足够简单了。
另一种方法可能是在创建标记时 Hook 事件,将它们存储在哈希中,然后在我需要手动单击时访问该存储。但是,我不知道存在任何此类事件,也找不到列出支持的事件的文档。
由于我自己没有创建标记,也不能(由于某些原因),因此在将它们添加到 map 时存储它们不是一个选项。
我认为既然 Mapbox 正在这样做,那么一定有一些钩子(Hook),但我找不到任何有值(value)的文档来为我指明正确的方向。
有什么建议或指示吗?
最佳答案
对于任何偶然发现这一点的人,我已经为我的特殊情况找到了一个可行的解决方案。此调用将为您完成:
layer.trigger 'featureClick', event, latlng, pos, data, layer_count
本质上,您需要抓取有问题的图层并触发点击,传递适当的数据:
{ cartodb_id: 123 }
的对象。 cartodb_id 是必需的。要在此处获取 latlng 和 cartodb_id,您可能需要执行我所做的操作 - 查询它:
function openMarker(layer, my_object_id) {
vars = { database_id: my_object_id };
opts = { format: 'geojson' };
query = "SELECT * FROM my_table WHERE my_object_id = {{ my_object_id }}"
sql = new cartodb.SQL({user: my_user_id});
sql.execute(query, vars, opts).done(function(data) {
if (data.features != undefined && data.features.length == 1)
row = data.features[0];
latlng = [ row.geometry.coordinates[1], row.geometry.coordinates[0] ];
layer.trigger('featureClick', null, latlng, null, { cartodb_id: row.properties.cartodb_id }, 0);
});
}
然后,您可以调用 open_marker,传递您想要打开标记的图层和您的对象标识符。只要它存在于您的 cartodb 数据库中,您就可以获取它。当然,可以调整查询以适合您的方式。
对于我的特定实现,我必须使用 setTimeout 调用来获得正确的控制流,就像我在页面加载时进行调用一样。但如果您在页面加载后调用,应该没问题。
因此,在给定本地标识符的情况下,打开标记的方法足够简单。希望这对其他人有帮助!
感谢此解决方案的灵感: https://gist.github.com/javisantana/7b817fda1e7511c451c7#file-index-html-L39
关于javascript - 打开 CartoDB/传单标记的火灾事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746456/
我有四个运行良好的 NSTimer。唯一的问题是两个应该开火,然后另外两个应该在前两个的中间开火。这是我的代码: initTimer = [NSTimer scheduledTimerWithT
我使用 SmartAdmin 进行 Angular,最近我将 Angular 从 1.4.12 更新到 Angular v1.6.6,之后我发现当我在使用 JarvisWidget 的状态之间切换时,
我是一名优秀的程序员,十分优秀!