%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/photogallery.detail.list/templates/slider/ |
Current File : //home/bitrix/www/bitrix/components/bitrix/photogallery.detail.list/templates/slider/script.js |
/******************************************************************** BPCStretchSlider - stretched "resin" slider data - initial data active - active element in array count - count of items in slider (0 if unknown) position - position of first element in slider (1 by default) ********************************************************************/ function BPCStretchSlider(data, position, count, active) { if (count <= 0 && data) count = data.length; else if (count <= 0 ) return false; this.oSource = new BPCSourse(data, position, count); if (!this.oSource) return false; this.oSource.iForceElementCount = 10; this.active = this.oSource.iFirstNumber; this.params = {'height' : 250, 'width' : 250, 'first_created' : 0, 'last_created' : 0, 'step_size' : 100}; this.events = {}; for (var ii = this.oSource.iFirstNumber; ii < this.oSource.Data.length; ii++) { if (active == this.oSource.Data[ii]['id']) this.active = ii; } this.oSource.OnAfterItemAdd = function() { try { var element_id = arguments[0][1]; var item_data = this.Data[element_id]; var item_id = item_data["id"]; var item = BX('item_' + item_id); if (!item) { var div = BX.create("DIV", {"props" : {"id" : "item_" + item_id}, "attrs" : {"class" : "photo-slider-item"}, "html" : ( '<table class="photo-slider-thumb" cellpadding="0">' + '<tr>' + '<td>' + '<a href="' + item_data['url'] + '">' + this.parentObject.CreateItem(element_id) + '</a>' + '</td>' + '</tr>' + '</table>')}); if (element_id < this.iFirstNumber) { var pointer = BX('item_' + this.Data[this.iFirstNumber]["id"]); if (pointer) pointer.parentNode.insertBefore(div, pointer); } else this.parentObject.tape.appendChild(div); pos = BX.pos(div); this.parentObject.tape.__int_width += parseInt(pos['width']); if (element_id < this.iFirstNumber) { this.parentObject.tape.style.left = (parseInt(this.parentObject.tape.style.left) - parseInt(pos['width'])) + 'px'; this.parentObject.prev.className = this.parentObject.prev.className.replace("-disabled", "-enabled").replace("-wait", "-enabled"); } else { this.parentObject.next.className = this.parentObject.next.className.replace("-disabled", "-enabled").replace("-wait", "-enabled"); } } } catch (e) { } } this.oSource.OnBeforeSendData = function() { arguments[0][1]['package_id'] = this.parentObject.pack_id; return arguments[0][1]; } return true; } BPCStretchSlider.prototype = { /** CreateSlider - create slider and set carret to the active item */ CreateSlider: function() { this.checkEvent('OnBeforeSliderCreate'); this.params['first_created'] = this.params['last_created'] = this.oSource.iFirstNumber; for (var item_id = this.oSource.iFirstNumber; item_id < this.oSource.Data.length; item_id++) { this.params['last_created'] = item_id; var res = this.oSource.checkItem(item_id); if (!res || res == 'wait') return res; this.MakeItem(item_id, (this.active == item_id)); } this.checkEvent('OnAfterSliderCreate'); return true; }, /** MakeItem create the item item_id - item id number - serial number in slider */ MakeItem: function(item_id, active_id) { this.checkEvent('OnBeforeItemMake', item_id, active_id); this.ShowItem(item_id, active_id); this.checkEvent('OnAfterItemMake', item_id, active_id); }, /** ShowItem - show the element, this method have to be redefined in template.php */ ShowItem: function(item_id, active_id) { }, /** CreateItem - create dom item Returns: object */ CreateItem: function(item_id) { var koeff = Math.min(this.params['width']/this.oSource.Data[item_id]['width'], this.params['height']/this.oSource.Data[item_id]['height']); var res = {'width' : this.oSource.Data[item_id]['width'], 'height' : this.oSource.Data[item_id]['height']}; if (koeff < 1) { res['width'] = parseInt(this.oSource.Data[item_id]['width']*koeff); res['height'] = parseInt(this.oSource.Data[item_id]['height']*koeff); } var image = new Image(); image.src = this.oSource.Data[item_id]['src']; return '<img id="image_' + item_id + '" border="0" ' + 'onload="window[\'_slider_' + this.pack_id + '\'].oSource.Data[this.id.replace(\'image_\', \'\')][\'loaded\'] = true; window[\'_slider_' + this.pack_id + '\'].checkEvent(\'OnAfterItemLoad\', this);" ' + 'style="width:' + res['width'] + 'px;height:' + res['height'] + 'px;" ' + 'title="' + this.oSource.Data[item_id]['title'] + '" alt="' + this.oSource.Data[item_id]['title'] + '" ' + 'src="' + this.oSource.Data[item_id]['src'] + '" />'; }, /** GoToNext - go to the next photo Returns: true || false || 'wait' */ GoToNext: function() { var pos_window = BX.pos(this.window); var tape_right_width = parseInt(this.tape.__int_width) + parseInt(this.tape.style.left) - pos_window['width']; var leftward = (tape_right_width > this.params['step_size'] ? this.params['step_size'] : tape_right_width); if (leftward > 0) { this.tape.style.left = parseInt(parseInt(this.tape.style.left) - leftward - 5) + 'px'; this.prev.className = this.prev.className.replace("-disabled", "-enabled").replace("-wait", "-enabled"); } if (this.oSource.Data.length <= this.oSource.iCountData && tape_right_width <= this.params['step_size'] * 10) this.oSource.getData(this.oSource.Data.length, true); if (tape_right_width > this.params['step_size']) this.next.className = this.next.className.replace("-disabled", "-enabled").replace("-wait", "-enabled"); else if (this.oSource.busy === true || this.oSource.Data.length < this.oSource.iCountData) this.next.className = this.next.className.replace("-enabled", "-wait").replace("-disabled", "-wait"); else this.next.className = this.next.className.replace("-enabled", "-disabled").replace("-wait", "-disabled"); return true; }, /** GoToPrev - go to the previous photo Returns: true || false || 'wait' */ GoToPrev: function() { var tape_left_width = parseInt(this.tape.style.left) * (-1); var rightward = (tape_left_width > this.params['step_size'] ? this.params['step_size'] : tape_left_width); if (rightward > 0) { this.tape.style.left = parseInt(parseInt(this.tape.style.left) + rightward) + 'px'; var pos_window = BX.pos(this.window); var tape_right_width = parseInt(this.tape.__int_width) + parseInt(this.tape.style.left) - pos_window['width']; if (tape_right_width > 0) this.next.className = this.next.className.replace("-disabled", "-enabled").replace("-wait", "-enabled"); } if (this.oSource.iFirstNumber > 1 && rightward <= this.params['step_size'] * 10) this.oSource.getData(this.oSource.iFirstNumber, false); if (tape_left_width > this.params['step_size']) this.prev.className = this.prev.className.replace("-disabled", "-enabled").replace("-wait", "-enabled"); else if (this.oSource.busy === true || this.oSource.iFirstNumber > 1) this.prev.className = this.prev.className.replace("-enabled", "-wait").replace("-disabled", "-wait"); else this.prev.className = this.prev.className.replace("-enabled", "-disabled").replace("-wait", "-disabled"); return true; }, checkEvent: function() { eventName = arguments[0]; if (this.events[eventName]) { return this.events[eventName](arguments); } if (this[eventName]) {return this[eventName](arguments); } return true; }, OnBeforeSliderCreate: function(image) { window['_slider_' + this.pack_id] = this; this.prev = BX('prev_' + this.pack_id); this.next = BX('next_' + this.pack_id); this.window = BX('slider_window_' + this.pack_id); this.tape = this.window.firstChild; this.oSource.parentObject = this; this.__leftward = 0; this.__width = 0; this.__active_element_founded = false; if (this.window.addEventListener) this.window.addEventListener('DOMMouseScroll', BX.proxy(this.OnMouseWheel, this), false); BX.bind(this.window, 'mousewheel', BX.proxy(this.OnMouseWheel, this)); }, OnMouseWheel: function(event) { if (!event) event = window.event; var wheelDelta = 0; if (event.wheelDelta) wheelDelta = event.wheelDelta / 120; else if (event.detail) wheelDelta = -event.detail / 3; BX.PreventDefault(event); var steps = (wheelDelta > 0 ? wheelDelta : wheelDelta * (-1)); for (var ii = 1; ii <= steps; ii++) { if (wheelDelta < 0) this.GoToNext(); else this.GoToPrev(); } }, OnAfterSliderCreate: function() { this.tape.style.left = (this.__leftward > 0 ? ('-' + this.__leftward + 'px') : '0px'); this.tape.__int_width = this.__width; delete this.__leftward; delete this.__width; delete this.__active_element_founded; BX.bind(this.next, 'click', BX.proxy(this.GoToNext, this)); BX.bind(this.prev, 'click', BX.proxy(this.GoToPrev, this)); }, OnAfterItemMake: function() { arguments = arguments[0]; var item_id = arguments[1]; var is_active = (arguments[2] === false || arguments[2] === true ? arguments[2] : (arguments[2] === 'false' ? false : (arguments[2] === 'true' ? true : null))); var item = BX('item_' + this.oSource.Data[item_id]['id']); var pos = BX.pos(item); this.__width += parseInt(pos['width']); if (!this.__active_element_founded && (is_active === false || is_active === true)) { if (is_active === false) { this.__leftward += parseInt(pos['width']); } else { this.__active_element_founded = true; } } } }; window.bPhotoSliderStretchLoad = true;