锘縡unction slider (a_init, a_tpl) { this.f_setValue = f_sliderSetValue; this.f_outValue = f_sliderOutValue; this.f_getPos = f_sliderGetPos; // register in the global collection if (!window.A_SLIDERS) window.A_SLIDERS = []; this.n_id = window.A_SLIDERS.length; window.A_SLIDERS[this.n_id] = this; // save config parameters in the slider object var s_key; if (a_tpl) for (s_key in a_tpl) this[s_key] = a_tpl[s_key]; for (s_key in a_init) this[s_key] = a_init[s_key]; s1 = this.s_spanname; s2 = this.s_sourcename; this.n_pix2value = this.n_pathLength / (this.n_maxValue - this.n_minValue); if (this.n_value == null) this.n_value = this.n_minValue; // generate the control's HTML document.write( '
' + '
' ); this.e_base = $('sl' + this.n_id + 'base'); this.e_slider = $('sl' + this.n_id + 'slider'); // safely hook document/window events if (document.onmousemove != f_sliderMouseMove) { window.f_savedMouseMove = document.onmousemove; document.onmousemove = f_sliderMouseMove; } if (document.onmouseup != f_sliderMouseUp) { window.f_savedMouseUp = document.onmouseup; document.onmouseup = f_sliderMouseUp; } // preset to the value in the input box if available this.f_setValue(this.n_value ? null : 1); this.e_slider.style.visibility = 'visible'; } function f_sliderSetValue (n_value, b_noInputCheck) { if (n_value == null) n_value = this.n_value == null ? this.n_minValue : this.n_value; if (isNaN(n_value)) return false; // round to closest multiple if step is specified if (this.n_step) n_value = Math.round((n_value - this.n_minValue) / this.n_step) * this.n_step + this.n_minValue; // smooth out the result if (n_value % 1) n_value = Math.round(n_value * 1e5) / 1e5; if (n_value < this.n_minValue) n_value = this.n_minValue; if (n_value > this.n_maxValue) n_value = this.n_maxValue; this.n_value = n_value; // move the slider if (this.b_vertical) this.e_slider.style.top = (this.n_pathTop + this.n_pathLength - Math.round((n_value - this.n_minValue) * this.n_pix2value)) + 'px'; else this.e_slider.style.left = (this.n_pathLeft + Math.round((n_value - this.n_minValue) * this.n_pix2value)) + 'px'; // save new value var e_input; if (this.s_name != null) { e_input = $(this.s_name); if(e_input != null) e_input.innerHTML = n_value; } } function f_sliderOutValue (n_value, b_noInputCheck) { if (n_value == null) n_value = this.n_value == null ? this.n_minValue : this.n_value; if (isNaN(n_value)) return false; // round to closest multiple if step is specified if (this.n_step) n_value = Math.round((n_value - this.n_minValue) / this.n_step) * this.n_step + this.n_minValue; // smooth out the result if (n_value % 1) n_value = Math.round(n_value * 1e5) / 1e5; if (n_value < this.n_minValue) n_value = this.n_minValue; if (n_value > this.n_maxValue) n_value = this.n_maxValue; if(this.s_type =='ajax') { changepage(n_value, this.s_sourcename, this.s_spanname); } else if(this.s_type =='url') { var tarurl = this.s_spanname.replace(/{\$pageid\/}/g, n_value); redirecturl(tarurl); } } // get absolute position of the element in the document function f_sliderGetPos (b_vertical, b_base) { var n_pos = 0, s_coord = (b_vertical ? 'Top' : 'Left'); var o_elem = o_elem2 = b_base ? this.e_base : this.e_slider; while (o_elem) { n_pos += o_elem["offset" + s_coord]; o_elem = o_elem.offsetParent; } o_elem = o_elem2; var n_offset; while (o_elem.tagName != "BODY") { n_offset = o_elem["scroll" + s_coord]; if (n_offset) n_pos -= o_elem["scroll" + s_coord]; o_elem = o_elem.parentNode; } return n_pos; } function f_sliderMouseDown (n_id) { window.n_activeSliderId = n_id; return false; } function f_sliderMouseUp (e_event, b_watching) { if (window.n_activeSliderId != null) { var o_slider = window.A_SLIDERS[window.n_activeSliderId]; o_slider.f_setValue(o_slider.n_minValue + (o_slider.b_vertical ? (o_slider.n_pathLength - parseInt(o_slider.e_slider.style.top) + o_slider.n_pathTop) : (parseInt(o_slider.e_slider.style.left) - o_slider.n_pathLeft)) / o_slider.n_pix2value); if (b_watching) return; window.n_activeSliderId = null; o_slider.f_outValue(o_slider.n_minValue + (o_slider.b_vertical ? (o_slider.n_pathLength - parseInt(o_slider.e_slider.style.top) + o_slider.n_pathTop) : (parseInt(o_slider.e_slider.style.left) - o_slider.n_pathLeft)) / o_slider.n_pix2value); } if (window.f_savedMouseUp) { return window.f_savedMouseUp(e_event); } } function f_sliderMouseMove (e_event) { if (!e_event && window.event) e_event = window.event; // save mouse coordinates if (e_event) { window.n_mouseX = e_event.clientX + f_scrollLeft(); window.n_mouseY = e_event.clientY + f_scrollTop(); } // check if in drag mode if (window.n_activeSliderId != null) { var o_slider = window.A_SLIDERS[window.n_activeSliderId]; var n_pxOffset; if (o_slider.b_vertical) { var n_sliderTop = window.n_mouseY - o_slider.n_sliderHeight / 2 - o_slider.f_getPos(1, 1) - 3; // limit the slider movement if (n_sliderTop < o_slider.n_pathTop) n_sliderTop = o_slider.n_pathTop; var n_pxMax = o_slider.n_pathTop + o_slider.n_pathLength; if (n_sliderTop > n_pxMax) n_sliderTop = n_pxMax; o_slider.e_slider.style.top = n_sliderTop + 'px'; n_pxOffset = o_slider.n_pathLength - n_sliderTop + o_slider.n_pathTop; } else { var n_sliderLeft = window.n_mouseX - o_slider.n_sliderWidth / 2 - o_slider.f_getPos(0, 1) - 3; // limit the slider movement if (n_sliderLeft < o_slider.n_pathLeft) n_sliderLeft = o_slider.n_pathLeft; var n_pxMax = o_slider.n_pathLeft + o_slider.n_pathLength; if (n_sliderLeft > n_pxMax) n_sliderLeft = n_pxMax; o_slider.e_slider.style.left = n_sliderLeft + 'px'; n_pxOffset = n_sliderLeft - o_slider.n_pathLeft; } if (o_slider.b_watch) f_sliderMouseUp(e_event, 1); return false; } if (window.f_savedMouseMove) return window.f_savedMouseMove(e_event); } // get the scroller positions of the page function f_scrollLeft() { return f_filterResults ( window.pageXOffset ? window.pageXOffset : 0, document.documentElement ? document.documentElement.scrollLeft : 0, document.body ? document.body.scrollLeft : 0 ); } function f_scrollTop() { return f_filterResults ( window.pageYOffset ? window.pageYOffset : 0, document.documentElement ? document.documentElement.scrollTop : 0, document.body ? document.body.scrollTop : 0 ); } function f_filterResults(n_win, n_docel, n_body) { var n_result = n_win ? n_win : 0; if (n_docel && (!n_result || (n_result > n_docel))) n_result = n_docel; return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result; } function f_sliderError (n_id, s_message) { alert("Slider #" + n_id + " Error:\n" + s_message); window.n_activeSliderId = null; }