Angular JS - 图像映射和过滤器
Angular JS - Image Maps and filters
我在学习 Angular 的过程中休息了一段时间,然后又重新开始学习,但在控制图像映射时遇到了一些问题。
基本上,我有一张带有一堆形状怪异区域的地图,我希望鼠标悬停来控制早期 ngRepeat 中的过滤器 - 我知道我可以在标准 div 上设置 ng-mouseEnter 来改变模型的价值并实时更新我的数据,但我不知道如何让它在地图中工作,因为 ng-mouseEnter 不适用于标准图像地图。
我的想法是,我设置了一个非常简单的内联脚本函数,如下所示:
function showThis(thing) {
return thing;
}
并让图像映射的 onMouseEnter 部分更新该函数,然后在我的过滤器中引用它。我在代码中想到的一个简单示例(复制粘贴了我的一个图像映射区域,以表明仅制作不可见的 div 有点困难)-
...
<script>
function showThis(thing) {
console.log(thing);
return thing;
};
</script>
<div class="foobars" ng-repeat="foo in fooBar | filter:showThis():true">
<p class="foo_text">{{foo.snippet}}</p>
<img ng-src="{{foo.imagePath}}">
</div>
<div class="images">
<img src="images/map/base.png" usemap="#imagemap">
<map name='imagemap'>
<area shape='poly' alt='Area One' href='' coords='33,288,35,276,41,272,60,276,96,234,97,198,140,171,189,192,182,242,144,261,144,271,108,286,66,297,42,296' onMouseEnter='showThis(1)'/>
<area shape='poly' alt='Area Two' href='' coords='245,170,186,194,144,176,149,136,212,110,252,123' onMouseEnter='showThis(2)' />
</map>
</div>
但这行不通,我不知道如何理解这个想法 运行。我显然遗漏了一些明显的东西,但我不知道是什么 - 我知道我可以在控制器中创建自定义过滤器,但我仍然不知道如何将图像映射的 "onMouseOver" 与内部过滤器相关联控制器。 Angular 图像映射的这一特殊功能在我的瞎眼看来似乎不太适用。
I made a plunkr here 来展示我的烂代码。我哪里错了?
使用 ng-mouseenter 代替 onMouseEnter,在 area 元素的 href 属性中添加 # 以避免重新加载页面:
<area shape='poly' alt='Area One' href='#' ng-mouseenter='showThis(1)'
coords='33,288,35,276,41,272,60,276,96,234,97,198,140,171,189,192,182,242,144,261,144,271,108,286,66,297,42,296'/>
我 forked your plunker 在进行了一些更改后,我认为,解决了您试图解决的问题...
关于 ng-mouseenter
的使用,@wZVanG 所说的是正确的。
此外,我不太确定您对 showThis
和第二个 ng-repeat
的计划是什么,所以我添加了一个函数 setSnippet
,它在鼠标输入和然后通过简单的 div.
在图像下方显示正确的片段
希望对您有所帮助。
我在学习 Angular 的过程中休息了一段时间,然后又重新开始学习,但在控制图像映射时遇到了一些问题。
基本上,我有一张带有一堆形状怪异区域的地图,我希望鼠标悬停来控制早期 ngRepeat 中的过滤器 - 我知道我可以在标准 div 上设置 ng-mouseEnter 来改变模型的价值并实时更新我的数据,但我不知道如何让它在地图中工作,因为 ng-mouseEnter 不适用于标准图像地图。
我的想法是,我设置了一个非常简单的内联脚本函数,如下所示:
function showThis(thing) {
return thing;
}
并让图像映射的 onMouseEnter 部分更新该函数,然后在我的过滤器中引用它。我在代码中想到的一个简单示例(复制粘贴了我的一个图像映射区域,以表明仅制作不可见的 div 有点困难)-
...
<script>
function showThis(thing) {
console.log(thing);
return thing;
};
</script>
<div class="foobars" ng-repeat="foo in fooBar | filter:showThis():true">
<p class="foo_text">{{foo.snippet}}</p>
<img ng-src="{{foo.imagePath}}">
</div>
<div class="images">
<img src="images/map/base.png" usemap="#imagemap">
<map name='imagemap'>
<area shape='poly' alt='Area One' href='' coords='33,288,35,276,41,272,60,276,96,234,97,198,140,171,189,192,182,242,144,261,144,271,108,286,66,297,42,296' onMouseEnter='showThis(1)'/>
<area shape='poly' alt='Area Two' href='' coords='245,170,186,194,144,176,149,136,212,110,252,123' onMouseEnter='showThis(2)' />
</map>
</div>
但这行不通,我不知道如何理解这个想法 运行。我显然遗漏了一些明显的东西,但我不知道是什么 - 我知道我可以在控制器中创建自定义过滤器,但我仍然不知道如何将图像映射的 "onMouseOver" 与内部过滤器相关联控制器。 Angular 图像映射的这一特殊功能在我的瞎眼看来似乎不太适用。
I made a plunkr here 来展示我的烂代码。我哪里错了?
使用 ng-mouseenter 代替 onMouseEnter,在 area 元素的 href 属性中添加 # 以避免重新加载页面:
<area shape='poly' alt='Area One' href='#' ng-mouseenter='showThis(1)'
coords='33,288,35,276,41,272,60,276,96,234,97,198,140,171,189,192,182,242,144,261,144,271,108,286,66,297,42,296'/>
我 forked your plunker 在进行了一些更改后,我认为,解决了您试图解决的问题...
关于 ng-mouseenter
的使用,@wZVanG 所说的是正确的。
此外,我不太确定您对 showThis
和第二个 ng-repeat
的计划是什么,所以我添加了一个函数 setSnippet
,它在鼠标输入和然后通过简单的 div.
希望对您有所帮助。