在Caph-list上设置元素上的焦点和位置3.1生成导航效果不佳

时间:2017-02-10 18:37:06

标签: tizen samsung-smart-tv tizen-web-app smart-tv

大家。

我有一个小问题,将焦点设置为水平上限列表中的元素,如果元素位于列表中,则将视图移动到该元素。 我正在做的是获取要传递给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时也会出现导航问题,但在这种情况下,我只能使用向上和向下导航元素,直到重新定位元素,然后我再次拥有完整的导航控制。

除了我所做的以外,我还需要做更多的事情吗?

是否有其他方法可以将焦点设置在元素上,即使它在列表中位于前面?

有没有办法移动到我想要聚焦的元素的位置而不影响导航?

1 个答案:

答案 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是否已提供,但根据我的经验,我不建议这样做,因为在我的情况下它失败了。