大家。
我有一个小问题,将焦点设置为水平上限列表中的元素,如果元素位于列表中,则将视图移动到该元素。 我正在做的是获取要传递给caph-list的元素数组中元素whit的位置索引。
index = $.map(favorites, function(obj, index) {
if (obj.id == element_id) {
return index;
}
然后,当我创建caph-list时,我使用initialItemIndex
参数来确保元素将显示在屏幕上,无论它在列表中的位置。我使用它是因为如果我不这样做,我想要设置焦点的元素将不会显示在屏幕上,直到我导航到它。
$('#favorite-items').caphList({
items: favorites,
template: 'template-favorite-items',
duration: '0.7s',
pageBufferSize: 1,
initialItemIndex: index,
containerClass: 'caph-list-container-favorites'
});
创建caph-list对象后,我使用focus()
函数将焦点设置在elemenet上。
item = $('#' + element_id);
$.caph.focus.controllerProvider.getInstance().focus(item);
通过这个过程,我将重点放在我想要的元素上,并且元素显示在屏幕上,但问题就开始了。当我尝试在屏幕上导航可聚焦元素并按遥控器上的向上或向下键时,它不起作用,直到我到达屏幕上最右边或最左边的元素并且caph-list元素进行重新定位并移动到向右或向左。在列表重新定位元素之后导航返回其正常行为,向上向下的向右键可以照常工作。
当我使用垂直caph-list时也会出现导航问题,但在这种情况下,我只能使用向上和向下导航元素,直到重新定位元素,然后我再次拥有完整的导航控制。
除了我所做的以外,我还需要做更多的事情吗?
是否有其他方法可以将焦点设置在元素上,即使它在列表中位于前面?
有没有办法移动到我想要聚焦的元素的位置而不影响导航?
答案 0 :(得分:0)
如果我理解了这个问题,那么你想强迫"专注于"元素的状态。
作为你的方法:
> $.caph.focus.controllerProvider.getInstance().focus(item);
不行,我建议这样做:
$.caph.focus.$$toAvailable(item);
来自文档:
http://developer.samsung.com/onlinedocs/tv/caphdocs/main.html?type=jquery&doc=tutorial&p1=7
默认情况下,$ .caph.focus会自动使新的附加焦点 使用MutationObserver可用的元素。但是,如果是MutationObserver 没有提供,你应该自己提供。所以, $ .caph.focus提供$$ toAvailable来管理它。这种方法 元素到最近的可聚焦查找器,并将所有相关事件绑定到 元件。
您将看到文档建议检查MutationObserver是否已提供,但根据我的经验,我不建议这样做,因为在我的情况下它失败了。