|
@@ -1,885 +0,0 @@
|
|
|
-try {
|
|
|
- (function(arr) {
|
|
|
- arr.forEach(function(item) {
|
|
|
- if (item.hasOwnProperty('remove')) {
|
|
|
- return
|
|
|
- }
|
|
|
- Object.defineProperty(item, 'remove', {
|
|
|
- configurable: true,
|
|
|
- enumerable: true,
|
|
|
- writable: true,
|
|
|
- value: function remove() {
|
|
|
- this.parentNode.removeChild(this)
|
|
|
- }
|
|
|
- })
|
|
|
- })
|
|
|
- })([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
|
|
|
- if (!("classList" in document.documentElement)) {
|
|
|
- Object.defineProperty(HTMLElement.prototype, 'classList', {
|
|
|
- get: function() {
|
|
|
- var self = this;
|
|
|
-
|
|
|
- function update(fn) {
|
|
|
- return function(value) {
|
|
|
- var classes = self.className.split(/\s+/g),
|
|
|
- index = classes.indexOf(value);
|
|
|
- fn(classes, index, value);
|
|
|
- self.className = classes.join(" ")
|
|
|
- }
|
|
|
- }
|
|
|
- return {
|
|
|
- add: update(function(classes, index, value) {
|
|
|
- if (!~index) classes.push(value)
|
|
|
- }),
|
|
|
- remove: update(function(classes, index) {
|
|
|
- if (~index) classes.splice(index, 1)
|
|
|
- }),
|
|
|
- toggle: update(function(classes, index, value) {
|
|
|
- if (~index) classes.splice(index, 1);
|
|
|
- else classes.push(value)
|
|
|
- }),
|
|
|
- contains: function(value) {
|
|
|
- return !!~self.className.split(/\s+/g).indexOf(value)
|
|
|
- },
|
|
|
- item: function(i) {
|
|
|
- return self.className.split(/\s+/g)[i] || null
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
- function fireKeyEvent(el, evtType, keyCode) {
|
|
|
- var doc = el.ownerDocument,
|
|
|
- win = doc.defaultView || doc.parentWindow,
|
|
|
- evtObj;
|
|
|
- if (doc.createEvent) {
|
|
|
- if (win.KeyEvent) {
|
|
|
- evtObj = doc.createEvent('KeyEvents');
|
|
|
- evtObj.initKeyEvent(evtType, true, true, win, false, false, false, false, keyCode, 0)
|
|
|
- } else {
|
|
|
- evtObj = doc.createEvent('UIEvents');
|
|
|
- Object.defineProperty(evtObj, 'keyCode', {
|
|
|
- get: function() {
|
|
|
- return this.keyCodeVal
|
|
|
- }
|
|
|
- });
|
|
|
- Object.defineProperty(evtObj, 'which', {
|
|
|
- get: function() {
|
|
|
- return this.keyCodeVal
|
|
|
- }
|
|
|
- });
|
|
|
- evtObj.initUIEvent(evtType, true, true, win, 1);
|
|
|
- evtObj.keyCodeVal = keyCode;
|
|
|
- if (evtObj.keyCode !== keyCode) {}
|
|
|
- }
|
|
|
- el.dispatchEvent(evtObj)
|
|
|
- } else if (doc.createEventObject) {
|
|
|
- evtObj = doc.createEventObject();
|
|
|
- evtObj.keyCode = keyCode;
|
|
|
- el.fireEvent('on' + evtType, evtObj)
|
|
|
- }
|
|
|
- }
|
|
|
-} catch (e) {}
|
|
|
-
|
|
|
-function addClass(ele, cls) {
|
|
|
- if (ele.classList) {
|
|
|
- ele.classList.add(cls)
|
|
|
- } else {
|
|
|
- if (!this.hasClass(ele, cls)) ele.className += " " + cls
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function arrIndexOf(arr, v) {
|
|
|
- for (var i = 0; i < arr.length; i++) {
|
|
|
- if (arr[i] == v) {
|
|
|
- return i
|
|
|
- }
|
|
|
- }
|
|
|
- return -1
|
|
|
-}
|
|
|
-
|
|
|
-function removeClass(ele, cls) {
|
|
|
- if (ele.classList) {
|
|
|
- ele.classList.remove(cls)
|
|
|
- } else {
|
|
|
- if (ele.className != '' && hasClass(ele, cls)) {
|
|
|
- var arrClassName = ele.className.split(' ');
|
|
|
- var classIndex = arrIndexOf(arrClassName, cls);
|
|
|
- if (classIndex !== -1) {
|
|
|
- arrClassName.splice(classIndex, 1);
|
|
|
- ele.className = arrClassName.join(' ')
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function toggleClass(ele, cls) {
|
|
|
- if (hasClass(ele, cls)) {
|
|
|
- removeClass(ele, cls)
|
|
|
- } else {
|
|
|
- addClass(ele, cls)
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function hasClass(element, cls) {
|
|
|
- return (' ' + element.className + ' ').indexOf(' ' + cls + ' ') > -1
|
|
|
-}
|
|
|
-
|
|
|
-function getClassNames(classStr, target, tagName) {
|
|
|
- target = target ? target : document;
|
|
|
- tagName = tagName ? tagName : "*";
|
|
|
- if (document.getElementsByClassName) {
|
|
|
- return target.getElementsByClassName(classStr)
|
|
|
- } else {
|
|
|
- var nodes = target.getElementsByTagName(tagName),
|
|
|
- ret = [];
|
|
|
- for (i = 0; i < nodes.length; i++) {
|
|
|
- if (hasClass(nodes[i], classStr)) {
|
|
|
- ret.push(nodes[i])
|
|
|
- }
|
|
|
- }
|
|
|
- return ret
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-function getElementLeft(ele) {
|
|
|
- var actualLeft = ele.offsetLeft;
|
|
|
- var current = ele.offsetParent;
|
|
|
- while (current !== null) {
|
|
|
- actualLeft += current.offsetLeft;
|
|
|
- current = current.offsetParent
|
|
|
- }
|
|
|
- return actualLeft
|
|
|
-}
|
|
|
-
|
|
|
-function getElementTop(ele) {
|
|
|
- var actualTop = ele.offsetTop;
|
|
|
- var current = ele.offsetParent;
|
|
|
- while (current !== null) {
|
|
|
- actualTop += current.offsetTop;
|
|
|
- current = current.offsetParent
|
|
|
- }
|
|
|
- return actualTop
|
|
|
-}
|
|
|
-var contains = document.documentElement.contains ? function(parent, node) {
|
|
|
- if (parent) {
|
|
|
- return parent !== node && parent.contains(node)
|
|
|
- }
|
|
|
-
|
|
|
-} : function(parent, node) {
|
|
|
- if (parent) {
|
|
|
- while (node && (node = node.parentNode))
|
|
|
- if (node === parent) return true
|
|
|
- return false
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-function getBoundingClientRect(ele) {
|
|
|
- var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
|
|
|
- var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
|
|
|
- if (ele.getBoundingClientRect) {
|
|
|
- if (typeof arguments.callee.offset !== 'number') {
|
|
|
- var temp = document.createElement('div');
|
|
|
- temp.style.cssText = "position:absolute;top:0;left:0";
|
|
|
- document.body.appendChild(temp);
|
|
|
- arguments.callee.offset = -temp.getBoundingClientRect().top - scrollTop;
|
|
|
- document.body.removeChild(temp);
|
|
|
- temp = null
|
|
|
- }
|
|
|
- var rect = ele.getBoundingClientRect();
|
|
|
- var offset = arguments.callee.offset;
|
|
|
- return {
|
|
|
- left: rect.left + offset,
|
|
|
- right: rect.right + offset,
|
|
|
- top: rect.top + offset,
|
|
|
- bottom: rect.bottom + offset,
|
|
|
- width: (rect.right + offset) - (rect.left + offset),
|
|
|
- height: (rect.bottom + offset) - (rect.top + offset)
|
|
|
- }
|
|
|
- } else {
|
|
|
- var actualLeft = getElementLeft(ele);
|
|
|
- var actualTop = getElementTop(ele);
|
|
|
- var offsetWidth = ele.offsetWidth;
|
|
|
- var offsetHeight = ele.offsetHeight;
|
|
|
- return {
|
|
|
- left: actualLeft - scrollLeft,
|
|
|
- right: actualLeft + offsetWidth - scrollLeft,
|
|
|
- top: actualTop - scrollTop,
|
|
|
- bottom: actualTop + offsetHeight - scrollTop,
|
|
|
- width: (actualLeft + offsetWidth - scrollLeft) - (actualLeft - scrollLeft),
|
|
|
- height: (actualTop + offsetHeight - scrollTop) - (actualTop - scrollTop)
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-(function(window) {
|
|
|
- var tvSysBtnBind = function(init) {
|
|
|
- var _this = this,
|
|
|
- _self = self;
|
|
|
- var id = init.id ? init.id : null,
|
|
|
- keyRemoveDefault = typeof init.keyRemoveDefault == "undefined" ? false : init.keyRemoveDefault,
|
|
|
- currentIndex = init.currentIndex ? parseInt(init.currentIndex) : 0,
|
|
|
- btnLeft = init.btnLeft ? init.btnLeft : 37,
|
|
|
- btnUp = init.btnUp ? init.btnUp : 38,
|
|
|
- btnRight = init.btnRight ? init.btnRight : 39,
|
|
|
- btnDown = init.btnDown ? init.btnDown : 40,
|
|
|
- btnEnter = init.btnEnter ? init.btnEnter : 13,
|
|
|
- btnBack = init.btnBack ? init.btnBack : 27,
|
|
|
- history = typeof init.history == "undefined" ? true : init.history,
|
|
|
- doublePress = typeof init.doublePress == "undefined" ? false : init.doublePress,
|
|
|
- isFloatLast = typeof init.isFloatLast == "undefined" ? false : init.isFloatLast,
|
|
|
- isCentered = typeof init.isCentered == "undefined" ? true : init.isCentered,
|
|
|
- currentClass = init.currentClass ? init.currentClass : "current",
|
|
|
- effect = init.effect ? init.effect : "slide1",
|
|
|
- element = new Array(),
|
|
|
- rules = init.rules ? init.rules : { hotbutton: {} },
|
|
|
- direction = "y";
|
|
|
- _this.className = init.className ? init.className : "hotbutton";
|
|
|
- this.event = {};
|
|
|
- var _tempElem;
|
|
|
- this.currentIndex = parseInt(currentIndex);
|
|
|
- this.defaultIndex = parseInt(currentIndex);
|
|
|
- this.currentClass = currentClass;
|
|
|
- this.historyFocus = {};
|
|
|
- if (!window.focusobj) window.focusobj = document.createElement("span");
|
|
|
- (typeof init.onLoad) == "function" ? init.onLoad: init.onLoad = function() {};
|
|
|
- (typeof init.onBack) == "function" ? init.onLoad: init.onBack = function() {};
|
|
|
- (typeof init.onCommPress) == "function" ? init.onCommPress: init.onCommPress = function() {};
|
|
|
- this.onLoad = function() {
|
|
|
- focusobj.innerHTML = '<div class="cssbk"><b class="lt"></b><b class="t"></b><b class="rt"></b><b class="r"></b><b class="rb"></b><b class="b"></b><b class="lb"></b> <b class="l"></b></div>';
|
|
|
- addClass(focusobj, "focusobj");
|
|
|
- addClass(focusobj, "current");
|
|
|
- focusobj.style.display = "none";
|
|
|
- _this.target = init.id ? document.getElementById(init.id) : document.body;
|
|
|
- _this.defaultTarget = _this.target;
|
|
|
- _this.currentId = init.id ? init.id : "Jdoc";
|
|
|
- self.getCurRule();
|
|
|
- _this.reLoad();
|
|
|
- _this.sourceClassName = _this.className;
|
|
|
- _this.sourceLength = element.length;
|
|
|
- _this.prev = element[currentIndex];
|
|
|
- _this.prevIndex = currentIndex;
|
|
|
- _this.current = element[currentIndex];
|
|
|
- _this.currentIndex = currentIndex;
|
|
|
- _this.target.appendChild(focusobj);
|
|
|
- init.onLoad.call(_this);
|
|
|
- window.focus();
|
|
|
- }
|
|
|
- self.getCurRule = function(item) {
|
|
|
- var obj = {};
|
|
|
- if (rules) {
|
|
|
- obj = rules["#" + _this.currentId + ">." + _this.className];
|
|
|
- if (typeof obj == "undefined") {
|
|
|
- if (rules[_this.className]) {
|
|
|
- obj = rules[_this.className]
|
|
|
- }
|
|
|
- }
|
|
|
- if (item && typeof rules[item] == "undefined") {
|
|
|
- // rules[item]={};
|
|
|
- }
|
|
|
- }
|
|
|
- return obj
|
|
|
- }
|
|
|
- this.reSetClass = function(item, index, curClass) {
|
|
|
- var obj = _self.getCurRule(item);
|
|
|
- if (!obj) {
|
|
|
- console.log("初始化" + _this.className + "失败");
|
|
|
- return
|
|
|
- }
|
|
|
- if (typeof obj["history"] == "undefined") obj["history"] = history;
|
|
|
- if (obj["history"]) _this.historyFocus[_this.currentId + _this.className] = _this.currentIndex;
|
|
|
- _this.prevCurrentClass = _this.currentClass;
|
|
|
- if (curClass) {
|
|
|
- _this.currentClass = curClass
|
|
|
- }
|
|
|
- var arr = item.split(">");
|
|
|
- for (var i = 0; i < arr.length; i++) {
|
|
|
- if (arr[i] == "") arr.splice(i)
|
|
|
- }
|
|
|
- for (var i = 0; i < arr.length; i++) {
|
|
|
- if (arr[i].indexOf("#") != -1) {
|
|
|
- _this.currentId = arr[i].replace("#", "");
|
|
|
- if (document.getElementById(_this.currentId)) _this.target = document.getElementById(_this.currentId)
|
|
|
- }
|
|
|
- if (arr[i].indexOf(".") != -1) {
|
|
|
- item = arr[i].replace(".", "")
|
|
|
- }
|
|
|
- if (arr[i].indexOf(".") == -1 && arr[i].indexOf("#") == -1) {
|
|
|
- item = arr[i]
|
|
|
- }
|
|
|
- }
|
|
|
- if (getClassNames(item, _this.target).length > 0) {
|
|
|
- _self.newItem(item, index)
|
|
|
- } else {
|
|
|
- _this.target = _this.defaultTarget;
|
|
|
- if (getClassNames(item, _this.target).length > 0) _self.newItem(item, index)
|
|
|
- }
|
|
|
- }
|
|
|
- this.onCommPress = function(e) {
|
|
|
- init.onCommPress.call(_this)
|
|
|
- }
|
|
|
- self.newItem = function(item, index) {
|
|
|
- var obj = _self.getCurRule();
|
|
|
- if (_this.prev) removeClass(_this.prev, _this.currentClass);
|
|
|
- if (typeof _this.historyFocus[_this.currentId + item] == "undefined") _this.historyFocus[_this.currentId + item] = 0;
|
|
|
- _this.className = item;
|
|
|
- var idx = obj["savelastIndex"] ? _this.currentIndex : 0;
|
|
|
- index = index > getClassNames(item, _this.target).length - 1 ? getClassNames(item, _this.target).length - 1 : index;
|
|
|
- idx = _this.historyFocus[_this.currentId + item] ? _this.historyFocus[_this.currentId + item] : idx;
|
|
|
- _this.currentIndex = typeof index != "undefined" ? index : idx;
|
|
|
- _this.prevIndex = _this.currentIndex;
|
|
|
- _this.reLoad()
|
|
|
- }
|
|
|
- self.readFn = function() {
|
|
|
- if ((typeof init.onEnterPress) == "function") {
|
|
|
- init.onEnterPress
|
|
|
- } else {
|
|
|
- init.onEnterPress = function() {}
|
|
|
- }
|
|
|
- if ((typeof init.onPress) == "function") {
|
|
|
- init.onPress
|
|
|
- } else {
|
|
|
- init.onPress = function() {}
|
|
|
- }
|
|
|
- }
|
|
|
- this.reLoad = function() {
|
|
|
- self.readFn();
|
|
|
- element = getClassNames(_this.className, _this.target);
|
|
|
- if (element.length <= 0) {
|
|
|
- console.log("初始化" + _this.className + "失败");
|
|
|
- return
|
|
|
- }
|
|
|
- this.hotbtn = element;
|
|
|
- if (element.length <= 0) return false;
|
|
|
- if (_this.currentIndex || _this.currentIndex == 0) {
|
|
|
- _this.currentIndex = parseInt(_this.currentIndex)
|
|
|
- } else {
|
|
|
- _this.currentIndex = parseInt(init.currentIndex)
|
|
|
- }
|
|
|
- if (isload >= 2 && _this.sourceClass == _this.className && _this.sourceLength != element.length && !isSet) {
|
|
|
- if (hasClass(_this.prev, _this.className) && _this.sourceLength > element.length) {
|
|
|
- _this.currentIndex = _this.currentIndex - (_this.sourceLength - element.length);
|
|
|
- _this.prevIndex = _this.prevIndex - (_this.sourceLength - element.length);
|
|
|
- _this.sourceLength = element.length
|
|
|
- } else if (hasClass(_this.prev, _this.className) && _this.sourceLength < element.length) {
|
|
|
- _this.currentIndex = _this.currentIndex + (element.length - _this.sourceLength);
|
|
|
- _this.prevIndex = _this.prevIndex + (element.length - _this.sourceLength);
|
|
|
- _this.sourceLength = element.length
|
|
|
- }
|
|
|
- }
|
|
|
- isSet = false;
|
|
|
- self.overIndex();
|
|
|
- _this.current = element[_this.currentIndex];
|
|
|
- _this.currentIndex = _this.currentIndex;
|
|
|
- _self.render(_this.currentIndex);
|
|
|
- for (var i = 0; i < this.hotbtn.length; i++) {
|
|
|
- this.hotbtn[i].setAttribute("data-id", i)
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function keydefault(e) {
|
|
|
- try {
|
|
|
- e.preventDefault()
|
|
|
- } catch (e) {}
|
|
|
- }
|
|
|
- var isSet = false;
|
|
|
- this.setCurrentIndex = function(index) {
|
|
|
- isSet = true;
|
|
|
- index = parseInt(index);
|
|
|
- _this.currentIndex = index;
|
|
|
- _this.current = element[index]
|
|
|
- }
|
|
|
- this.pageScroll = function(ele, Scroll, direction) {
|
|
|
- if (!ele["data-sum"]) ele["data-sum"] = 0;
|
|
|
- if (!ele["data-sumx"]) ele["data-sumx"] = 0;
|
|
|
- ele.style.position = "relative";
|
|
|
- ele.children[0].style.position = "absolute";
|
|
|
- if (direction == "up") {
|
|
|
- if (ele["data-sum"] - Scroll > 0) {
|
|
|
- ele["data-sum"] = parseInt(ele["data-sum"]) - Scroll
|
|
|
- } else {
|
|
|
- ele["data-sum"] = 0
|
|
|
- }
|
|
|
- ele.children[0].style.left = "0";
|
|
|
- ele.children[0].style.top = "-" + ele["data-sum"] + "px"
|
|
|
- } else if (direction == "down") {
|
|
|
- var clientHeight = ele.children[0].clientHeight;
|
|
|
- if (ele["data-sum"] + Scroll < clientHeight - ele.clientHeight / 2) {
|
|
|
- ele["data-sum"] = parseInt(ele["data-sum"]) + Scroll
|
|
|
- } else {
|
|
|
- ele["data-sum"] = clientHeight - ele.clientHeight
|
|
|
- }
|
|
|
- ele.children[0].style.left = "0";
|
|
|
- ele.children[0].style.top = "-" + ele["data-sum"] + "px"
|
|
|
- } else if (direction == "left") {
|
|
|
- if (ele["data-sumx"] - Scroll > 0) {
|
|
|
- ele["data-sumx"] = parseInt(ele["data-sumx"]) - Scroll
|
|
|
- } else {
|
|
|
- ele["data-sumx"] = clientWidth - ele.clientWidth
|
|
|
- }
|
|
|
- ele.children[0].style.top = "0";
|
|
|
- ele.children[0].style.left = "-" + ele["data-sumx"] + "px"
|
|
|
- } else if (direction == "right") {
|
|
|
- var clientWidth = ele.children[0].clientWidth;
|
|
|
- if (ele["data-sumx"] + Scroll < clientWidth - ele.clientWidth / 2) {
|
|
|
- ele["data-sumx"] = parseInt(ele["data-sum"]) + Scroll
|
|
|
- } else {
|
|
|
- ele["data-sumx"] = 0;
|
|
|
- }
|
|
|
- ele.children[0].style.top = "0";
|
|
|
- ele.children[0].style.left = "-" + ele["data-sumx"] + "px"
|
|
|
- }
|
|
|
- }
|
|
|
- this.viewScrollY = function(y, view) {
|
|
|
- var maxTop = view.children[0].clientHeight - view.clientHeight;
|
|
|
- var obj = self.getCurRule();
|
|
|
- var sumtop = view.children[0]["ScrollY"] ? view.children[0]["ScrollY"] : 0;
|
|
|
- var top = sumtop + y;
|
|
|
- middle = getBoundingClientRect(view).height / 2 - getBoundingClientRect(_this.current).height / 2;
|
|
|
- top = top + middle;
|
|
|
- if (top > 0 || maxTop < 0) top = 0;
|
|
|
- else if (Math.abs(top) > Math.abs(maxTop)) {
|
|
|
- top = -maxTop;
|
|
|
- //view.children[0]["ScrollY"] == 0 这个句忘记干嘛的了 留着
|
|
|
- }
|
|
|
- top = obj["customTop"] != undefined ? obj["customTop"] : top;
|
|
|
- view.children[0].style.top = top + "px";
|
|
|
- view.children[0]["ScrollY"] = top
|
|
|
- }
|
|
|
- var maxLeft = 0;
|
|
|
- this.viewScrollX = function(x, view, viewWidth) {
|
|
|
- var maxLeft = viewWidth - view.clientWidth;
|
|
|
- var obj = self.getCurRule();
|
|
|
- var sumleft = view.children[0]["ScrollX"] ? view.children[0]["ScrollX"] : 0;
|
|
|
- var left = sumleft + x;
|
|
|
- middle = getBoundingClientRect(view).width / 2 - getBoundingClientRect(_this.current).width / 2;
|
|
|
- left = left + middle;
|
|
|
- if (left > 0 || maxLeft < 0) left = 0;
|
|
|
- else if (Math.abs(left) > Math.abs(maxLeft)) {
|
|
|
- left = -maxLeft;
|
|
|
- }
|
|
|
- left = obj["customLeft"] != undefined ? obj["customLeft"] : left;
|
|
|
- view.children[0].style.left = left + "px";
|
|
|
- view.children[0]["ScrollX"] = left
|
|
|
- }
|
|
|
- this.onPress = function(e) {
|
|
|
- init.onPress.call(_this)
|
|
|
- }
|
|
|
- this.onEnterPress = function() {
|
|
|
- init.onEnterPress.call(_this)
|
|
|
- }
|
|
|
- window.onBackEvent = this.onBack = function() {
|
|
|
- init.onBack.call(_this)
|
|
|
- }
|
|
|
- self.getScrollTop = function() {
|
|
|
- var scrollTop = 0;
|
|
|
- if (document.documentElement && document.documentElement.scrollTop) {
|
|
|
- scrollTop = document.documentElement.scrollTop
|
|
|
- } else if (document.body) {
|
|
|
- scrollTop = document.body.scrollTop
|
|
|
- }
|
|
|
- return scrollTop
|
|
|
- }
|
|
|
- this.scroll = function(view, direction) {
|
|
|
- var obj = self.getCurRule();
|
|
|
- if (obj == undefined || !obj["direction"]) return;
|
|
|
-
|
|
|
- direction = direction ? direction : obj["direction"];
|
|
|
- var viewX = view ? view : obj["directionParentX"] ? obj["directionParentX"] : obj["directionParent"] ? obj["directionParent"] : _this.current.parentNode.parentNode;
|
|
|
- var viewY = view ? view : obj["directionParentY"] ? obj["directionParentY"] : obj["directionParent"] ? obj["directionParent"] : _this.current.parentNode.parentNode;
|
|
|
- var sum = 0;
|
|
|
- if (direction.indexOf("x") > -1) {
|
|
|
- if (viewX instanceof Array) {
|
|
|
- for (var i = 0; i < viewX.length; i++) {
|
|
|
-
|
|
|
- if (contains(viewX[i], _this.current)) {
|
|
|
- viewX = viewX[i];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (viewX instanceof Array || !contains(viewX, _this.current)) return;
|
|
|
- for (var i = 0; i < _this.hotbtn.length; i++) {
|
|
|
- sum = getBoundingClientRect(_this.hotbtn[i]).width + sum
|
|
|
- }
|
|
|
- if (_this.hotbtn.length > 1) {
|
|
|
- if (!obj["scrollWidth"])
|
|
|
- sum = sum + Math.ceil(getBoundingClientRect(_this.hotbtn[1]).left - getBoundingClientRect(_this.hotbtn[0]).right) * (_this.hotbtn.length);
|
|
|
- else {
|
|
|
- sum = _this.hotbtn.length * obj["scrollWidth"]; //因为样式多样性,宽度获取并不准确 所以可以自定义
|
|
|
- }
|
|
|
-
|
|
|
- } else {
|
|
|
- sum = sum;
|
|
|
- }
|
|
|
- viewX.style.position = "relative";
|
|
|
- viewX.children[0].style.position = "absolute";
|
|
|
- viewX.children[0].style.width = (sum + 30) + "px";
|
|
|
- _this.viewScrollX(-(getBoundingClientRect(_this.current).left - getBoundingClientRect(viewX).left), viewX, sum)
|
|
|
- }
|
|
|
- if (direction.indexOf("y") > -1) {
|
|
|
- if (viewY instanceof Array) {
|
|
|
- for (var i = 0; i < viewY.length; i++) {
|
|
|
-
|
|
|
- if (contains(viewY[i], _this.current)) {
|
|
|
- viewY = viewY[i];
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (viewY instanceof Array || !contains(viewY, _this.current)) return;
|
|
|
- viewY.style.position = "relative";
|
|
|
- viewY.children[0].style.position = "absolute";
|
|
|
-
|
|
|
- _this.viewScrollY(-(getBoundingClientRect(_this.current).top - getBoundingClientRect(viewY).top), viewY)
|
|
|
- }
|
|
|
- }
|
|
|
- var isload = 0;
|
|
|
- self.render = function(index) {
|
|
|
- if (_this.renderType == "self") return;
|
|
|
- isload = isload + 1;
|
|
|
- if (isload == 2) {
|
|
|
- _this.sourceLength = element.length
|
|
|
- }
|
|
|
- if (_this.prevCurrentClass) {
|
|
|
- var ele = getClassNames(_this.prevCurrentClass, _this.target);
|
|
|
- for (var i = 0; i < ele.length; i++) {
|
|
|
- if (hasClass(ele[i], _this.prevCurrentClass)) {
|
|
|
- removeClass(ele[i], _this.prevCurrentClass)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if (element[index]) addClass(element[index], _this.currentClass);
|
|
|
- else return;
|
|
|
- for (var i = 0; i < element.length; i++) {
|
|
|
- if (i != index && hasClass(element[i], _this.currentClass)) {
|
|
|
- removeClass(element[i], _this.currentClass)
|
|
|
- }
|
|
|
- }
|
|
|
- _this.scroll();
|
|
|
- var effect = element[index].getAttribute("data-effect");
|
|
|
- if (effect) {
|
|
|
- focusobj.setAttribute("style", " position: fixed; z-index: 19;width:" + (getBoundingClientRect(element[index]).width) + "px ;height:" + (getBoundingClientRect(element[index]).height) + "px; left:" + getBoundingClientRect(element[index]).left + "px;top:" + getBoundingClientRect(element[index]).top + "px;");
|
|
|
- focusobj.setAttribute("class", "focusobj current " + effect);
|
|
|
- focusobj.style.display = "list-item"
|
|
|
- } else {
|
|
|
- focusobj.setAttribute("style", "");
|
|
|
- focusobj.style.display = "none"
|
|
|
- }
|
|
|
- }
|
|
|
- self.EventUtil = {
|
|
|
- add: function(obj, callback) {
|
|
|
- if (typeof(obj.onkeypress) == "null") {
|
|
|
- obj.onkeypress = function(e) {
|
|
|
- callback && callback(e)
|
|
|
- }
|
|
|
- } else {
|
|
|
- obj.onkeydown = function(e) {
|
|
|
- callback && callback(e)
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- var _t, sum = 0;
|
|
|
- EventUtil.add(document, function(e) {
|
|
|
- _this.renderType = "self";
|
|
|
- if (doublePress) {
|
|
|
- if (sum < 2)
|
|
|
- clearTimeout(_t);
|
|
|
- sum++;
|
|
|
- _t = setTimeout(function() {
|
|
|
- _self.onPressFn(e)
|
|
|
- sum = 0;
|
|
|
- }, 100)
|
|
|
- } else {
|
|
|
- _self.onPressFn(e);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- });
|
|
|
- self.overIndex = function() {
|
|
|
- if (_this.currentIndex >= element.length - 1) {
|
|
|
- _this.currentIndex = element.length - 1
|
|
|
- }
|
|
|
- if (_this.currentIndex < 0) {
|
|
|
- _this.currentIndex = 0
|
|
|
- }
|
|
|
- }
|
|
|
- self.isNumber = function(val) {
|
|
|
- var regPos = /^\d+(\.\d+)?$/;
|
|
|
- var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/;
|
|
|
- if (regPos.test(val) || regNeg.test(val)) {
|
|
|
- return true
|
|
|
- } else {
|
|
|
- return false
|
|
|
- }
|
|
|
- }
|
|
|
- var distance = function(pointA, pointB, type) {
|
|
|
- var P1 = getBoundingClientRect(pointA),
|
|
|
- P2 = getBoundingClientRect(pointB);
|
|
|
- var dist = 0;
|
|
|
- switch (type) {
|
|
|
- case "AA":
|
|
|
- dist = Math.sqrt(((P1.left - P2.left) * (P1.left - P2.left)) + ((P1.top - P2.top) * (P1.top - P2.top)))
|
|
|
- break;
|
|
|
- case "AB":
|
|
|
- dist = Math.sqrt(((P1.left - P2.right) * (P1.left - P2.right)) + ((P1.top - P2.top) * (P1.top - P2.top)))
|
|
|
- break;
|
|
|
- case "AC":
|
|
|
- dist = Math.sqrt(((P1.left - P2.right) * (P1.left - P2.right)) + ((P1.top - P2.bottom) * (P1.top - P2.bottom)))
|
|
|
- break;
|
|
|
- case "AD":
|
|
|
- dist = Math.sqrt(((P1.left - P2.left) * (P1.left - P2.left)) + ((P1.top - P2.bottom) * (P1.top - P2.bottom)))
|
|
|
- break;
|
|
|
- case "BA":
|
|
|
- dist = Math.sqrt(((P1.right - P2.left) * (P1.right - P2.left)) + ((P1.top - P2.top) * (P1.top - P2.top)))
|
|
|
- break;
|
|
|
- case "BB":
|
|
|
- dist = Math.sqrt(((P1.right - P2.right) * (P1.right - P2.right)) + ((P1.top - P2.top) * (P1.top - P2.top)))
|
|
|
- break;
|
|
|
- case "BC":
|
|
|
- dist = Math.sqrt(((P1.right - P2.right) * (P1.right - P2.right)) + ((P1.top - P2.bottom) * (P1.top - P2.bottom)))
|
|
|
- break;
|
|
|
- case "BD":
|
|
|
- dist = Math.sqrt(((P1.right - P2.left) * (P1.right - P2.left)) + ((P1.top - P2.bottom) * (P1.top - P2.bottom)))
|
|
|
- break;
|
|
|
- case "CA":
|
|
|
- dist = Math.sqrt(((P1.left - P2.left) * (P1.left - P2.left)) + ((P1.bottom - P2.top) * (P1.bottom - P2.top)))
|
|
|
- break;
|
|
|
- case "CB":
|
|
|
- dist = Math.sqrt(((P1.left - P2.right) * (P1.left - P2.right)) + ((P1.bottom - P2.top) * (P1.bottom - P2.top)))
|
|
|
- break;
|
|
|
- case "CC":
|
|
|
- dist = Math.sqrt(((P1.left - P2.left) * (P1.left - P2.left)) + ((P1.bottom - P2.bottom) * (P1.bottom - P2.bottom)))
|
|
|
- break;
|
|
|
- case "CD":
|
|
|
- dist = Math.sqrt(((P1.right - P2.left) * (P1.right - P2.left)) + ((P1.bottom - P2.bottom) * (P1.bottom - P2.bottom)))
|
|
|
- break;
|
|
|
- case "DA":
|
|
|
- dist = Math.sqrt(((P1.left - P2.left) * (P1.left - P2.left)) + ((P1.bottom - P2.top) * (P1.bottom - P2.top)))
|
|
|
- break;
|
|
|
- case "DB":
|
|
|
- dist = Math.sqrt(((P1.right - P2.right) * (P1.right - P2.right)) + ((P1.bottom - P2.top) * (P1.bottom - P2.top)))
|
|
|
- break;
|
|
|
- case "DC":
|
|
|
- dist = Math.sqrt(((P1.right - P2.left) * (P1.right - P2.left)) + ((P1.bottom - P2.bottom) * (P1.bottom - P2.bottom)))
|
|
|
- break;
|
|
|
- case "DD":
|
|
|
- dist = Math.sqrt(((P1.right - P2.right) * (P1.right - P2.right)) + ((P1.bottom - P2.bottom) * (P1.bottom - P2.bottom)))
|
|
|
- break
|
|
|
- }
|
|
|
- return dist
|
|
|
- }
|
|
|
- self.ruleFn = function(index, direction) {
|
|
|
- var obj = {};
|
|
|
- if (rules) {
|
|
|
- obj = _self.getCurRule()
|
|
|
- }
|
|
|
- if (obj && typeof obj == "object" && typeof obj["line"] != "undefined") {
|
|
|
- var line = obj["line"]
|
|
|
- } else {
|
|
|
- var line = _this.hotbtn.length
|
|
|
- }
|
|
|
- line = parseInt(line);
|
|
|
- if (obj && typeof obj == "object" && typeof obj[_this.currentIndex] != "undefined" && typeof obj[_this.currentIndex][index] != "undefined") {
|
|
|
- var objRules = obj[_this.currentIndex];
|
|
|
- if (self.isNumber(objRules[index])) {
|
|
|
- _this.currentIndex = parseInt(_this.currentIndex) + parseInt(objRules[index])
|
|
|
- } else if (Array.isArray(objRules[index])) {
|
|
|
- _this.reSetClass(objRules[index][0], objRules[index][1], objRules[index][2])
|
|
|
- } else if (typeof objRules[index] == "function") {
|
|
|
- objRules[index].call(_this)
|
|
|
- } else if (typeof obj["line"] != "undefined") {
|
|
|
- _this.currentIndex = _this.currentIndex + line
|
|
|
- }
|
|
|
- } else {
|
|
|
- var jump = element[_this.currentIndex].getAttribute("data-" + direction);
|
|
|
- jump = parseInt(jump);
|
|
|
- var max = Math.sqrt(window.screen.width * window.screen.width + window.screen.height * window.screen.height);
|
|
|
- if (direction == "up") {
|
|
|
- if (_this.currentIndex > line - 1 && !obj["autoMove"]) _this.currentIndex = jump ? _this.currentIndex - jump : _this.currentIndex - line;
|
|
|
- else if (obj && typeof obj["up"] == "object") _this.reSetClass(obj["up"][0], obj["up"][1], obj["up"][2]);
|
|
|
- else if (obj && typeof obj["up"] == "function") obj["up"].call(_this)
|
|
|
- else {
|
|
|
- var min1 = max,
|
|
|
- min2 = max,
|
|
|
- curIndex = _this.currentIndex,
|
|
|
- curIndex2 = _this.currentIndex;
|
|
|
- for (var i = 0; i < _this.hotbtn.length; i++) {
|
|
|
- var cur1 = distance(_this.current, _this.hotbtn[i], "AD");
|
|
|
- var cur2 = distance(_this.current, _this.hotbtn[i], "BC");
|
|
|
- if (cur1 < min1 && cur1 > 0 && getBoundingClientRect(_this.current).top > getBoundingClientRect(_this.hotbtn[i]).top && _this.currentIndex > i) {
|
|
|
- min1 = cur1;
|
|
|
- curIndex = i;
|
|
|
- }
|
|
|
-
|
|
|
- if (cur2 < min2 && cur2 > 0 && getBoundingClientRect(_this.current).top > getBoundingClientRect(_this.hotbtn[i]).top && _this.currentIndex > i) {
|
|
|
- min2 = cur2;
|
|
|
- curIndex2 = i;
|
|
|
- }
|
|
|
- }
|
|
|
- curIndex = min1 < min2 ? curIndex : curIndex2;
|
|
|
- _this.currentIndex = curIndex;
|
|
|
- }
|
|
|
- } else if (direction == "left") {
|
|
|
- if ((_this.currentIndex) % line != 0 && !obj["autoMove"]) _this.currentIndex = jump ? _this.currentIndex - jump : _this.currentIndex - 1;
|
|
|
- else if (obj && typeof obj["left"] == "object") _this.reSetClass(obj["left"][0], obj["left"][1], obj["left"][2]);
|
|
|
- else if (obj && typeof obj["left"] == "function") obj["left"].call(_this)
|
|
|
- else {
|
|
|
- var min1 = max,
|
|
|
- min2 = max
|
|
|
- curIndex = _this.currentIndex, curIndex2 = _this.currentIndex;
|
|
|
- for (var i = 0; i < _this.hotbtn.length; i++) {
|
|
|
- var cur1 = distance(_this.current, _this.hotbtn[i], "AB");
|
|
|
- var cur2 = distance(_this.current, _this.hotbtn[i], "DC");
|
|
|
- if (cur1 < min1 && cur1 > 0 && getBoundingClientRect(_this.current).left > getBoundingClientRect(_this.hotbtn[i]).left && _this.currentIndex > i) {
|
|
|
- min1 = cur1;
|
|
|
- curIndex = i;
|
|
|
- }
|
|
|
-
|
|
|
- if (cur2 < min2 && cur2 > 0 && getBoundingClientRect(_this.current).left > getBoundingClientRect(_this.hotbtn[i]).left && _this.currentIndex > i) {
|
|
|
- min2 = cur2;
|
|
|
- curIndex2 = i;
|
|
|
- }
|
|
|
- }
|
|
|
- curIndex = min1 < min2 ? curIndex : curIndex2;
|
|
|
- _this.currentIndex = curIndex
|
|
|
- }
|
|
|
- } else if (direction == "right") {
|
|
|
- if ((_this.currentIndex + 1) % line != 0 && !obj["autoMove"]) _this.currentIndex = jump ? _this.currentIndex + jump : _this.currentIndex + 1;
|
|
|
- else if (obj && typeof obj["right"] == "object") _this.reSetClass(obj["right"][0], obj["right"][1], obj["right"][2]);
|
|
|
- else if (obj && typeof obj["right"] == "function") obj["right"].call(_this)
|
|
|
- else {
|
|
|
- var min1 = max,
|
|
|
- min2 = max,
|
|
|
- curIndex = _this.currentIndex,
|
|
|
- curIndex2 = _this.currentIndex;
|
|
|
- for (var i = 0; i < _this.hotbtn.length; i++) {
|
|
|
- var cur1 = distance(_this.current, _this.hotbtn[i], "BA");
|
|
|
- var cur2 = distance(_this.current, _this.hotbtn[i], "CD");
|
|
|
-
|
|
|
- if (cur1 < min1 && cur1 > 0 && getBoundingClientRect(_this.current).right < getBoundingClientRect(_this.hotbtn[i]).right && _this.currentIndex < i) {
|
|
|
- min1 = cur1;
|
|
|
- curIndex = i;
|
|
|
- }
|
|
|
-
|
|
|
- if (cur2 < min2 && cur2 > 0 && getBoundingClientRect(_this.current).right < getBoundingClientRect(_this.hotbtn[i]).right && _this.currentIndex < i) {
|
|
|
- min2 = cur2;
|
|
|
-
|
|
|
- curIndex2 = i;
|
|
|
- }
|
|
|
- }
|
|
|
- curIndex = min1 < min2 ? curIndex : curIndex2;
|
|
|
- _this.currentIndex = curIndex;
|
|
|
- }
|
|
|
- } else if (direction == "down") {
|
|
|
- if (_this.hotbtn.length - line > _this.currentIndex && !obj["autoMove"]) _this.currentIndex = jump ? _this.currentIndex + jump : _this.currentIndex + line;
|
|
|
- else if (obj && typeof obj["down"] == "object") _this.reSetClass(obj["down"][0], obj["down"][1], obj["down"][2]);
|
|
|
- else if (obj && typeof obj["down"] == "function") obj["down"].call(_this);
|
|
|
- else if (_this.currentIndex + line > _this.hotbtn.length - 1 && _this.currentIndex + line <= (line - _this.hotbtn.length % line) + _this.hotbtn.length - 1 && _this.hotbtn.length % line != 0 && isFloatLast) {
|
|
|
- _this.currentIndex = _this.currentIndex + line;
|
|
|
- self.overIndex()
|
|
|
- } else {
|
|
|
- var min1 = max,
|
|
|
- min2 = max,
|
|
|
- curIndex = _this.currentIndex,
|
|
|
- curIndex2 = _this.currentIndex;
|
|
|
- for (var i = 0; i < _this.hotbtn.length; i++) {
|
|
|
- var cur1 = distance(_this.current, _this.hotbtn[i], "DA");
|
|
|
- var cur2 = distance(_this.current, _this.hotbtn[i], "CB");
|
|
|
- if (cur1 < min1 && cur1 > 0 && getBoundingClientRect(_this.current).bottom < getBoundingClientRect(_this.hotbtn[i]).bottom && _this.currentIndex < i) {
|
|
|
- min1 = cur1;
|
|
|
- curIndex = i;
|
|
|
- }
|
|
|
- if (cur2 < min2 && cur2 > 0 && getBoundingClientRect(_this.current).bottom < getBoundingClientRect(_this.hotbtn[i]).bottom && _this.currentIndex < i) {
|
|
|
- min2 = cur2;
|
|
|
- curIndex2 = i;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- curIndex = min1 < min2 ? curIndex : curIndex2;
|
|
|
- _this.currentIndex = curIndex;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- self.rule = function(keyCode) {
|
|
|
- if (element.length <= 0) {
|
|
|
- console.log("初始化" + _this.className + "失败");
|
|
|
- return
|
|
|
- }
|
|
|
- self.overIndex();
|
|
|
- if (keyCode == btnLeft) {
|
|
|
- self.ruleFn(0, "left")
|
|
|
- } else if (keyCode == btnRight) {
|
|
|
- self.ruleFn(2, "right")
|
|
|
- } else if (keyCode == btnUp) {
|
|
|
- self.ruleFn(1, "up")
|
|
|
- } else if (keyCode == btnDown) {
|
|
|
- self.ruleFn(3, "down")
|
|
|
- }
|
|
|
- self.overIndex()
|
|
|
- }
|
|
|
- this.BACK = function() {
|
|
|
- self.onPressFn("back")
|
|
|
- }
|
|
|
- this.LEFT = function() {
|
|
|
- self.onPressFn("left")
|
|
|
- }
|
|
|
- this.RIGHT = function() {
|
|
|
- self.onPressFn("right")
|
|
|
- }
|
|
|
- this.UP = function() {
|
|
|
- self.onPressFn("up")
|
|
|
- }
|
|
|
- this.DOWN = function() {
|
|
|
- self.onPressFn("down")
|
|
|
- }
|
|
|
- self.onPressFn = function(e) {
|
|
|
- var keyCode = "";
|
|
|
- if (typeof e == "object") {
|
|
|
- keyCode = e.keyCode
|
|
|
- } else {
|
|
|
- if (e == "left") {
|
|
|
- keyCode = btnLeft
|
|
|
- } else if (e == "right") {
|
|
|
- keyCode = btnRight
|
|
|
- } else if (e == "up") {
|
|
|
- keyCode = btnUp
|
|
|
- } else if (e == "down") {
|
|
|
- keyCode = btnDown
|
|
|
- } else if (e == "back") {
|
|
|
- keyCode = btnBack
|
|
|
- }
|
|
|
- }
|
|
|
- _this.event = e;
|
|
|
- _this.currentIndex = _this.currentIndex >= element.length - 1 ? element.length - 1 : _this.currentIndex;
|
|
|
- _this.prev = element[_this.currentIndex];
|
|
|
- _this.prevIndex = _this.currentIndex;
|
|
|
- self.rule(keyCode);
|
|
|
- _this.current = element[_this.currentIndex];
|
|
|
- _this.currentIndex = _this.currentIndex;
|
|
|
- _this.className = _this.className;
|
|
|
- _this.onCommPress.call(_this);
|
|
|
- if (keyCode == 8 || keyCode == btnBack) {
|
|
|
- if (rules["#" + _this.currentId + ">." + _this.className] && (typeof rules["#" + _this.currentId + ">." + _this.className]["onBack"]) == "function") rules["#" + _this.currentId + ">." + _this.className]["onBack"].call(_this);
|
|
|
- else if (rules[_this.className] && (typeof rules[_this.className]["onBack"]) == "function") rules[_this.className]["onBack"].call(_this);
|
|
|
- else _this.onBack.call(_this)
|
|
|
- }
|
|
|
- if (rules && rules["#" + _this.currentId + ">." + _this.className] && (typeof rules["#" + _this.currentId + ">." + _this.className]["onPress"]) == "function") init.rules["#" + _this.currentId + ">." + _this.className]["onPress"].call(_this);
|
|
|
- else if (rules && rules[_this.className] && (typeof rules[_this.className]["onPress"]) == "function") init.rules[_this.className]["onPress"].call(_this);
|
|
|
- else _this.onPress.call(_this);
|
|
|
- if (keyCode == btnEnter) {
|
|
|
- if (rules["#" + _this.currentId + ">." + _this.className] && (typeof rules["#" + _this.currentId + ">." + _this.className]["onEnterPress"]) == "function") rules["#" + _this.currentId + ">." + _this.className]["onEnterPress"].call(_this);
|
|
|
- else if (rules[_this.className] && (typeof rules[_this.className]["onEnterPress"]) == "function") rules[_this.className]["onEnterPress"].call(_this);
|
|
|
- else _this.onEnterPress.call(_this)
|
|
|
- }
|
|
|
- _this.renderType = "";
|
|
|
- _self.render(_this.currentIndex);
|
|
|
- keydefault(e)
|
|
|
- }
|
|
|
- this.onLoad()
|
|
|
- }
|
|
|
- window.tvSysBtnBind = tvSysBtnBind
|
|
|
-})(window)
|