分享一則JavaScript滾動(dòng)條插件源碼
來源:易賢網(wǎng) 閱讀:706 次 日期:2015-03-06 11:13:50
溫馨提示:易賢網(wǎng)小編為您整理了“分享一則JavaScript滾動(dòng)條插件源碼”,方便廣大網(wǎng)友查閱!

這是過年的時(shí)候自己寫的js滾動(dòng)條插件的源碼,做出的效果自己并不滿意,正因?yàn)樽龅牟⒉粷M意所以回頭重新鞏固和深入學(xué)習(xí)js,這個(gè)插件有如下幾個(gè)不太滿意的地方:

內(nèi)容的過度效果,可以參閱QQ客戶端最近會(huì)話列表里的滾動(dòng)條,它的滾動(dòng)非常的平滑,簡單的說就是缺少動(dòng)畫過渡效果。

并不算完美的兼容性,在IE6、7下的style仍然有點(diǎn)缺憾。

樣式的不完美,例如鼠標(biāo)懸浮才顯示滾動(dòng)條,移除后隱藏這種效果都沒有寫。

內(nèi)部結(jié)構(gòu)的混亂,需要調(diào)整內(nèi)容結(jié)構(gòu)。

滾動(dòng)條那個(gè)圖片畢竟不是美工,自己切圖切的真是惡心到爆了...囧

總體來說還是可以看的,還是缺少一個(gè)動(dòng)畫。在寫這個(gè)插件意識(shí)到自己的插件用到了一些比較基礎(chǔ)的函數(shù),于是想到把這些函數(shù)應(yīng)該封裝起來,最近仍然在深入學(xué)習(xí)js,把手頭上這本書看完就應(yīng)該著手寫這個(gè)基礎(chǔ)函數(shù)的插件了,當(dāng)然,動(dòng)畫引擎必不可少。話不多說,源碼在此(注意:本插件完整版的是有圖片的,請(qǐng)?jiān)谖哪└郊邢螺d完整的插件):

CSS

代碼如下:

.lf_Scroll, .lf_Scroll li { padding: 0; margin: 0; list-style: none; font: 14px/24px "Helvetica Neue" ,Helvetica,Arial, 'Microsoft Yahei' ,sans-serif; outline: none; }

.lf_Scroll { cursor: pointer; width: 10px; position: absolute; right: 0; top: 0; filter: alpha(opacity=50); -moz-opacity: 0.5; -khtml-opacity: 0.5; opacity: 0.5; }

.lf_ScrollFocus { filter: alpha(opacity=100); -moz-opacity: 1; -khtml-opacity: 1; opacity: 1; }

.lfs_Top, .lfs_Center, .lfs_Bottom { background: url('ScrollBar.gif'); width: 10px; height: 10px; }

.lfs_Top { background-position: 1px 0px; }

.lfs_Center { background-position: center 0; height: 100px; }

.lfs_Bottom { background-position: -22px 0; }

/*Developers config*/

.rollDiv { height: 100%; width: 100%; overflow: hidden; position: relative; }

JavaScript

代碼如下:

/*

* This plugin is defined on the simulation Webpage scroll bar, please insert after binding for DOM events

*

* Comment version: 1.0.0

* Author:linkfly

* Sina:為你聚焦半世紀(jì) | cnblogs:http://www.cnblogs.com/silin6/ | Email:linkFly6@live.com

* date:2014-02-05 02:38:35

*

*

* Dual licensed under the MIT and GPL licenses:

*

*

*

*/

(function (window, undefined) {

//配置參數(shù)信息

var config = {

auto: true,

height: 'auto',

width: 'auto'

};

var linkFlyScroll = function (dom, options) {

/// <summary>

/// 1: 生成模擬滾動(dòng)條對(duì)象,【請(qǐng)?jiān)诒緦?duì)象工作之后再為您指定的對(duì)象綁定事件,否則您之前綁定的事件將不會(huì)進(jìn)行工作】

/// 1.1 - linkFlyScroll(dom) - 在指定的dom上生成滾動(dòng)條對(duì)象

/// 1.2 - linkFlyScroll(dom,options) - 生成滾動(dòng)條對(duì)象,同時(shí)提供一系列的參數(shù)允許您自定義配置該對(duì)象的工作模型

/// </summary>

/// <param name="dom" type="String Or element">

/// 傳入js的dom對(duì)象,或者為string類型的該對(duì)象ID

/// </param>

/// <param name="options" type="Json">

/// 自定義配置該對(duì)象的工作模型,有如下選項(xiàng):

/// [可選]auto(Boolean):當(dāng)內(nèi)容并未達(dá)到容器的高度的時(shí)候,是否自動(dòng)隱藏滾動(dòng)條,默認(rèn)為true(是)

/// [可選]height(Int Or String):默認(rèn)單位為px,可以為int和String.值為auto則默認(rèn)采用css的高度

/// [可選]width(Int Or String):默認(rèn)單位為px,可以為int和String.值為auto則默認(rèn)采用css的寬度

/// </param>

/// <returns type="linkFlyScroll" />

if (typeof (dom) === 'string') {

dom = document.getElementById(dom);

}

//沒有指定dom和沒有查找到有效的dom

//linkFlyScroll("")、 linkFlyScroll(null)、linkFlyScroll(undefined)

if (!dom || !dom.nodeType)

return this;

//創(chuàng)建容器對(duì)象

var scrollObj = document.createElement('div');

//深度克隆內(nèi)容對(duì)象,并未包含事件,所以需要等到linkFlyScroll對(duì)象工作完畢后才可以為該dom對(duì)象綁定事件

var cloneObj = dom.cloneNode(true);

scrollObj.className = 'rollDiv';

scrollObj.appendChild(cloneObj);

//替換頁面上當(dāng)前對(duì)象

dom.parentNode.replaceChild(scrollObj, dom);

return new linkFlyScroll.prototype.init(scrollObj, options ? options : {});

};

linkFlyScroll.prototype.init = function (dom, options) {

/// <summary>

/// 1: 本對(duì)象才是真正意義上工作的對(duì)象,特殊的工作方式是因?yàn)榭赡艽嬖趌inkFlyScroll的靜態(tài)調(diào)用和實(shí)例化調(diào)用

/// 1.1 - init(dom,options) - 在指定的dom上生成滾動(dòng)條對(duì)象

/// </summary>

/// <param name="dom" type="element">

/// dom對(duì)象

/// </param>

/// <param name="options" type="Json">

/// 自定義配置該對(duì)象的工作模型,有如下選項(xiàng):

/// [可選]auto(Boolean):當(dāng)內(nèi)容并未達(dá)到容器的高度的時(shí)候,是否自動(dòng)隱藏滾動(dòng)條,默認(rèn)為true(是)

/// [可選]height(Int Or String):默認(rèn)單位為px,可以為int和String.值為auto則默認(rèn)采用css的高度

/// [可選]width(Int Or String):默認(rèn)單位為px,可以為int和String.值為auto則默認(rèn)采用css的寬度

/// </param>

/// <returns type="linkFlyScroll" />

/*

* 本對(duì)象包含以下屬性:

* isDrag:是否正在拖拽滾動(dòng)條

* startTop:(工作中)滾動(dòng)條開始滾動(dòng)位置

* endTop:(工作中)滾動(dòng)條結(jié)束滾動(dòng)位置

* topLimit:滾動(dòng)條頂部極限位置

* bottomLimit:滾動(dòng)條底部極限位置

* context:內(nèi)容Dom

* scrollRadix:滾動(dòng)基數(shù)

* target:容器Dom

*/

//當(dāng)前this對(duì)象,為防止this指針在環(huán)境中會(huì)經(jīng)常改變(例如綁定事件的時(shí)候),所以將當(dāng)前對(duì)象保存起來

var currScroll = this;

//DOMElement

if (dom.nodeType) {

//保存容器和內(nèi)容DOM

currScroll.target = dom;

currScroll.context = dom.firstChild;

//合并配置參數(shù)

currScroll.options = tool.extend(config, options);

if (currScroll.options.width !== 'auto') {

dom.style.width = tool.convertValue(currScroll.options.width);

}

if (currScroll.options.height !== 'auto') {

dom.style.height = tool.convertValue(currScroll.options.height);

}

//查找到有效的dom

while (currScroll.context.nodeType != 1) {

currScroll.context = currScroll.context.nextSibling;

}

//創(chuàng)建滾動(dòng)條dom

currScroll.scrollUl = document.createElement('ul');

currScroll.scrollUl.className = 'lf_Scroll';

currScroll.scrollUl.appendChild(tool.setClass('li', 'lfs_Top'));

currScroll.scrollUl.appendChild(tool.setClass('li', 'lfs_Center'));

currScroll.scrollUl.appendChild(tool.setClass('li', 'lfs_Bottom'));

currScroll.context.style.position = 'relative';

//先呈現(xiàn)在頁面上才可以讀取位置數(shù)據(jù)

dom.appendChild(currScroll.scrollUl);

this.change();

tool.addScrollEvent(currScroll.context, function (e) {

//綁定鼠標(biāo)滾輪事件,3px滾動(dòng)單位

if (e.wheel > 0) {//滾輪向上滾動(dòng)

var currTop = currScroll.endTop -= 3;

currScroll.scrollEvent.call(currScroll, currTop);

} else {//滾輪向下滾動(dòng)

var currTop = currScroll.endTop += 3;

currScroll.scrollEvent.call(currScroll, currTop);

}

});

//需要處理禁止文字在拖動(dòng)的時(shí)候被選中 TODO

//鼠標(biāo)點(diǎn)下事件,需要判斷是否是左鍵點(diǎn)擊,目前右鍵也會(huì)實(shí)現(xiàn)滾動(dòng) TODO

tool.addEvent(currScroll.scrollUl, 'mousedown', function (e) {

mouseDown.call(currScroll, e);

});

//追加事件,為了更好的用戶體驗(yàn)在body上實(shí)現(xiàn)監(jiān)聽

tool.addEvent(document.body, 'mousemove', function (e) {

if (currScroll.isDrag) {

//獲取當(dāng)前鼠標(biāo)位置

var position = tool.getMousePos(e);

//當(dāng)前滾動(dòng)條top位置

var currTop = (currScroll.endTop + position.y - currScroll.startTop);

//call是為了讓this指針準(zhǔn)確的指向本工作對(duì)象

currScroll.scrollEvent.call(currScroll, currTop);

}

return false;

});

//追加鼠標(biāo)釋放事件,為了準(zhǔn)確的捕捉到釋放事件在body上監(jiān)聽

tool.addEvent(document.body, 'mouseup', function () {

mouseUp.call(currScroll, []);

});

var mouseDown = function (e) {

/// <summary>

/// 1: 鼠標(biāo)按下事件

/// 1.1 - mouseDown(e) - 滾動(dòng)條中鼠標(biāo)按下滾動(dòng)條事件

/// </summary>

/// <param name="e" type="Event">

/// Event對(duì)象

/// </param>

/// <returns type="linkFlyScroll" />

currScroll.isDrag = true;

//獲取當(dāng)前鼠標(biāo)y位置

currScroll.startTop = tool.getMousePos(e).y;

tool.addClass(currScroll.scrollUl, 'lf_ScrollFocus');

return false;

};

var mouseUp = function () {

/// <summary>

/// 1: 鼠標(biāo)釋放事件

/// 1.1 - mouseUp() - 滾動(dòng)條中鼠標(biāo)釋放滾動(dòng)條事件

/// </summary>

/// <returns type="linkFlyScroll" />

currScroll.isDrag = false;

currScroll.endTop = currScroll.scrollUl.style.top ? parseInt(currScroll.scrollUl.style.top) : 0;

tool.removeClass(currScroll.scrollUl, 'lf_ScrollFocus');

return false;

};

currScroll.scrollEvent = function (currTop) {

/// <summary>

/// 1: 滾動(dòng)事件(核心),傳入需要滾動(dòng)的坐標(biāo)即可(滾動(dòng)條top)

/// 1.1 - scrollEvent(currTop) - 核心滾動(dòng)事件

/// </summary>

/// <param name="currTop" type="Int">

/// 滾動(dòng)條頂部距離上一層容器的top值

/// </param>

/// <returns type="void" />

if (currTop <= currScroll.topLimit || currTop < 0) {//頂部極限

currTop = currScroll.topLimit;

} else if (currTop >= currScroll.bottomLimit) {//底部極限

currTop = currScroll.bottomLimit;

}

//滾動(dòng)條偏移效果

currScroll.scrollUl.style.top = currTop + 'px';

var tempTop = parseInt(currScroll.context.style.top ? currScroll.context.style.top : 0);

//debug code

// document.getElementById('postionInfo').innerHTML = 'currTop:' + currTop + ' 滾動(dòng)基數(shù):' + currScroll.scrollRadix + ' bottomLimit:' + currScroll.bottomLimit + ' endTop:' + currScroll.endTop + ' startTop:' + currScroll.startTop + " Y:" + currTop + " offsetTop:" + currScroll.scrollUl.offsetTop + " compute:" + (currTop * currScroll.scrollRadix * -1) + 'px';

//text code

//內(nèi)容滾動(dòng):當(dāng)前滾動(dòng)條top*基數(shù)取負(fù)數(shù)

currScroll.context.style.top = currTop * currScroll.scrollRadix * -1 + 'px';

};

return currScroll;

};

};

linkFlyScroll.prototype.init.prototype.change = function () {

/// <summary>

/// 1: 滾動(dòng)條內(nèi)容改變函數(shù)

/// 1.1 - change() - 本函數(shù)代表刷新本滾動(dòng)條對(duì)象的數(shù)據(jù),在某些情況下,內(nèi)容的數(shù)據(jù)是一直在變化的,可以調(diào)用本函數(shù)對(duì)當(dāng)前滾動(dòng)條對(duì)象刷新數(shù)據(jù)

/// </summary>

/// <returns type="linkFlyScroll" />

/*

* linkFlyScroll包含的屬性主要在本函數(shù)中初始化或重新定義:

* isDrag:是否正在拖拽滾動(dòng)條

* startTop:(工作中)滾動(dòng)條開始滾動(dòng)位置

* endTop:(工作中)滾動(dòng)條結(jié)束滾動(dòng)位置

* topLimit:滾動(dòng)條頂部極限位置

* bottomLimit:滾動(dòng)條底部極限位置

* context:內(nèi)容Dom

* scrollRadix:滾動(dòng)基數(shù)

* target:容器Dom

*/

//重置或讀取一系列數(shù)據(jù)

var currScroll = this;

currScroll.isDrag = false,

currScroll.startTop = 0,

currScroll.endTop = (currScroll.scrollUl.style.top ? parseInt(currScroll.scrollUl.style.top) : 0),

currScroll.topLimit = currScroll.target.scrollTop,

currScroll.bottomLimit = currScroll.target.clientHeight,

currScroll.scrollRadix = 10;

//得出滾動(dòng)條的高度:內(nèi)容高度*(容器高度/內(nèi)容高度=容器占內(nèi)容百分比)

var scrollPx = currScroll.target.clientHeight * (currScroll.target.clientHeight / currScroll.context.offsetHeight);

//滾動(dòng)條高度

currScroll.scrollUl.childNodes[1].style.height = scrollPx + 'px';

if (currScroll.context.clientHeight <= currScroll.target.clientHeight && currScroll.options.auto) {

currScroll.scrollUl.style.display = 'none';

} else {

currScroll.scrollUl.style.display = 'block';

//當(dāng)滾動(dòng)條顯示,修正最大位置數(shù)據(jù)

currScroll.bottomLimit -= currScroll.scrollUl.offsetHeight;

}

//設(shè)置滾動(dòng)條滾動(dòng)基數(shù)(滾動(dòng)條沒滾動(dòng)1px內(nèi)容滾動(dòng)像素):(內(nèi)容高度-容器高度[因?yàn)楫?dāng)前容器已經(jīng)顯示了一屏])/滾動(dòng)條top(滾動(dòng)條空白可滾動(dòng)高度)

currScroll.scrollRadix = (currScroll.context.offsetHeight - currScroll.target.clientHeight) / currScroll.bottomLimit;

return currScroll;

};

linkFlyScroll.prototype.init.prototype.roll = function (value) {

/// <summary>

/// 1: 滾動(dòng)條偏移方法

/// 1.1 - roll(value) - 滾動(dòng)條滾動(dòng)方法

/// </summary>

/// <param name="value" type="Int">

/// 滾動(dòng)條目標(biāo)滾動(dòng)的百分比

/// </param>

/// <returns type="linkFlyScroll" />

var currScroll = this;

if (typeof (value) !== 'number') {

return currScroll;

}

var currTop = (currScroll.bottomLimit - currScroll.topLimit) * value / 100;

currScroll.scrollEvent(currTop);

currScroll.endTop = currTop;

return currScroll;

};

/*

* 工具類

*/

var tool = {

setClass: function (element, className) {

/// <summary>

/// 1: 設(shè)置元素節(jié)點(diǎn)的class屬性

/// 1.1 - setClass(element,className) - 設(shè)置元素節(jié)點(diǎn)的class屬性,如沒有該節(jié)點(diǎn)則創(chuàng)建該節(jié)點(diǎn),并返回修改后的節(jié)點(diǎn)對(duì)象

/// </summary>

/// <param name="element" type="Element Or String">

/// 傳入String則創(chuàng)建該節(jié)點(diǎn),否則修改該節(jié)點(diǎn)

/// </param>

/// <param name="className" type="String">

/// Class Name

/// </param>

/// <returns type="Element" />

if (typeof element === 'string') {

element = document.createElement(element);

}

element.className = className;

return element;

},

hasClass: function (element, className) {

/// <summary>

/// 1: 判斷元素是否有class

/// 1.1 - hasClass(element,className) - 判斷元素是否有class,在業(yè)務(wù)中異常(基本沒有該情況的發(fā)生)和有該class返回true,否則返回false

/// </summary>

/// <param name="element" type="Element Or String">

/// 節(jié)點(diǎn)對(duì)象

/// </param>

/// <param name="className" type="String">

/// Class Name

/// </param>

/// <returns type="Element" />

if (!element || element.nodeType !== 1)//讓異常通過,外面不進(jìn)行處理

return true;

var elementClassName = element.className;

if (elementClassName.length < 1) {

return false;

}

if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) {

return true;

}

return false;

},

addClass: function (element, className) {

/// <summary>

/// 1: 為元素【追加】class

/// 1.1 - addClass(element,className) - 為元素【追加】class,并返回修改后的class

/// </summary>

/// <param name="element" type="Element Or String">

/// 節(jié)點(diǎn)對(duì)象

/// </param>

/// <param name="className" type="String">

/// Class Name

/// </param>

/// <returns type="Element" />

if (!tool.hasClass(element, className)) {

if (element.className.length < 1) {

element.className = className;

} else {

element.className += ' ' + className;

}

}

return element;

},

removeClass: function (element, className) {

/// <summary>

/// 1: 為元素移除class

/// 1.1 - addClass(element,className) - 為元素移除class,并返回修改后的class

/// </summary>

/// <param name="element" type="Element Or String">

/// 節(jié)點(diǎn)對(duì)象

/// </param>

/// <param name="className" type="String">

/// Class Name

/// </param>

/// <returns type="Element" />

if (tool.hasClass(element, className)) {

var reg = new RegExp("(^|\\s)" + className + "(\\s|$)");

element.className = element.className.replace(reg, '');

}

return element;

},

css: function (element, key) {

/// <summary>

/// 1: 獲取元素css指定的屬性值

/// 1.1 - css(element,className) - 獲取元素css指定的屬性值

/// </summary>

/// <param name="element" type="Element Or String">

/// 節(jié)點(diǎn)對(duì)象

/// </param>

/// <param name="key" type="String">

/// 要獲取的css屬性

/// </param>

/// <returns type="String" />

return element.currentStyle ? element.currentStyle[key] : document.defaultView.getComputedStyle(element, false)[key];

},

addEvent: function (element, type, fn) {

/// <summary>

/// 1: 為元素追加事件

/// 1.1 - css(element, type, fn) - 為元素追加事件,函數(shù)中this指向事件源

/// </summary>

/// <param name="element" type="Element Or String">

/// 節(jié)點(diǎn)對(duì)象

/// </param>

/// <param name="type" type="String">

/// 追加的事件名,不含字符on

/// </param>

/// <param name="fn" type="Function">

/// 事件對(duì)象

/// </param>

/// <returns type="void" />

if (element.attachEvent) {

element['e' + type + fn] = fn;

element[type + fn] = function () { element['e' + type + fn](window.event); }

element.attachEvent('on' + type, element[type + fn]);

} else if (element.addEventListener) {

element.addEventListener(type, fn, false);

}

},

// removeEvent: function (element, type, fn) {

// /// <summary>

// /// 1: 為元素刪除事件,本函數(shù)并未用到

// /// 1.1 - removeEvent(element, type, fn) - 為元素刪除事件

// /// </summary>

// /// <param name="element" type="Element Or String">

// /// 節(jié)點(diǎn)對(duì)象

// /// </param>

// /// <param name="type" type="String">

// /// 刪除的事件名

// /// </param>

// /// <param name="key" type="String">

// /// 刪除的事件的函數(shù)名

// /// </param>

// /// <returns type="void" />

// if (element.detachEvent) {

// element.detachEvent('on' + type, element[type + fn]);

// element[type + fn] = null;

// } else if (element.removeEventListener) {

// element.removeEventListener(type, fn, false);

// }

// },

addScrollEvent: function (element, fn) {

/// <summary>

/// 1: 追加ScrollEvent事件

/// 1.1 - addScrollEvent(element,fn) - 在元素上追加ScrollEvent事件(特殊事件,在元素上鼠標(biāo)滾輪滾動(dòng)事件)

/// </summary>

/// <param name="element" type="Element Or String">

/// 元素節(jié)點(diǎn)

/// </param>

/// <param name="fn" type="Function">

/// 事件方法

/// </param>

/// <returns type="void" />

var bindScrollFn = function (e) {

e = e || window.event;

//判斷滾輪滾動(dòng)方向:Firefox和其他瀏覽器不同

e.wheel = (e.wheelDelta ? e.wheelDelta : -e.detail) > 0 ? 1 : -1; // 通過事件判斷鼠標(biāo)滾輪反向,1是向上,-1是向下

//阻止瀏覽器默認(rèn)行為

if (e.preventDefault) { //ff

e.preventDefault();

} else {

e.returnValue = false; //ie

}

fn.call(element, e);

}

if (document.addEventListener) {

//ff

element.addEventListener('DOMMouseScroll', bindScrollFn, false);

//w3c

element.addEventListener('mousewheel', bindScrollFn, false);

} else//ie

{

element.attachEvent('onmousewheel', bindScrollFn);

}

},

getEvent: function () {

/// <summary>

/// 1: 獲取Event對(duì)象

/// 1.1 - getEvent() - 在無參數(shù)的情況下獲取Event對(duì)象,同時(shí)兼容性處理IE和FF

/// </summary>

/// <returns type="Event" />

if (document.all) {

return window.event;

}

func = getEvent.caller;

while (func != null) {

var arg0 = func.arguments[0];

if (arg0) {

if ((arg0.constructor == Event || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {

return arg0;

}

}

func = func.caller;

}

return null;

},

getMousePos: function (ev) {

/// <summary>

/// 1: 獲取當(dāng)前鼠標(biāo)坐標(biāo)

/// 1.1 - getMousePos(ev) - 獲取當(dāng)前鼠標(biāo)坐標(biāo),兼容性處理,返回的對(duì)象格式:{ x:鼠標(biāo)x坐標(biāo) , y:鼠標(biāo)y坐標(biāo) }

/// </summary>

/// <param name="ev" type="Event">

/// Event事件對(duì)象

/// </param>

/// <returns type="Json" />

if (!ev) {

ev = currScroll.getEvent();

}

if (ev.pageX || ev.pageY) {

return {

x: ev.pageX,

y: ev.pageY

};

}

if (document.documentElement && document.documentElement.scrollTop) {

return {

x: ev.clientX + document.documentElement.scrollLeft - document.documentElement.clientLeft,

y: ev.clientY + document.documentElement.scrollTop - document.documentElement.clientTop

};

}

else if (document.body) {

return {

x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,

y: ev.clientY + document.body.scrollTop - document.body.clientTop

};

}

},

extend: function (oldObj, newObj) {

/// <summary>

/// 1: 將兩個(gè)對(duì)象進(jìn)行合并

/// 1.1 - extend(oldObj,newObj) - 將兩個(gè)對(duì)象合并,并返回合并后的對(duì)象,采用clone的方式實(shí)現(xiàn),所以不會(huì)對(duì)兩個(gè)對(duì)象產(chǎn)生任何影響

/// </summary>

/// <param name="oldObj" type="Object">

/// 要合并的對(duì)象A,該對(duì)象作為基礎(chǔ)對(duì)象,將新對(duì)象的同名屬性覆蓋到基礎(chǔ)對(duì)象中

/// </param>

/// <param name="newObj" type="Object">

/// 要合并的對(duì)象B

/// </param>

/// <returns type="Object" />

var tempObj = tool.clone(oldObj);

for (var key in newObj) {

if (newObj.hasOwnProperty(key) && !tempObj.hasOwnProperty(key)) {

tempObj[key] = newObj[key];

}

}

return tempObj;

},

clone: function (obj) {

/// <summary>

/// 1: 克隆一個(gè)對(duì)象

/// 1.1 - clone(obj) - 克隆一個(gè)對(duì)象,并返回克隆后的新對(duì)象,該對(duì)象的原型是被克隆的對(duì)象

/// </summary>

/// <param name="obj" type="Object">

/// 要克隆的對(duì)象

/// </param>

/// <returns type="Object" />

function Clone() { }

Clone.prototype = obj;

var newObj = new Clone();

for (var key in newObj) {

if (typeof newObj[key] == "object") {

newObj[key] = tool.clone(newObj[key]);

}

}

return newObj;

},

convertValue: function (value) {

/// <summary>

/// 1: 將數(shù)值轉(zhuǎn)換為有效的數(shù)值

/// 1.1 - convertValue(value) - 將Json配置的css數(shù)值轉(zhuǎn)換為有效的數(shù)值,請(qǐng)保證value的值不為"auto"

/// </summary>

/// <param name="value" type="Object">

/// 要轉(zhuǎn)換的數(shù)值

/// </param>

/// <returns type="Object" />

var reg = /^\d+$/g;

if (typeof (value) === 'number' || reg.test(value)) {

return value + 'px';

} else

return value;

}

};

//注冊(cè)到window下

window.linkFlyScroll = linkFlyScroll;

//注冊(cè)到window.so命名空間下

if (!window.so) {

window.so = {};

}

window.so.scroll = window.linkFlyScroll;

})(window);

代碼示例

代碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">

<html xmlns="">

<head>

<title></title>

<link href="linkFlyScroll/linkFlyRollCss.css" rel="stylesheet" type="text/css" />

<script src="linkFlyScroll/linkFlyScroll-1.0.0.js" type="text/javascript"></script>

<script type="text/javascript">

window.onload = function () {

var config = {

auto: true, //當(dāng)內(nèi)容并未達(dá)到容器的高度的時(shí)候,是否自動(dòng)隱藏滾動(dòng)條

height: '100', //滾動(dòng)條對(duì)象工作高度(超過該高度則顯示滾動(dòng)條),auto取對(duì)象當(dāng)前高

width: 'auto'//滾動(dòng)條對(duì)象工作寬度

};

var scrollObj = so.scroll('obj', config);

// scrollObj.change();//當(dāng)滾動(dòng)條內(nèi)容改變后,需要刷新滾動(dòng)條的顯示,則調(diào)用本方法

// scrollObj.roll(value);//把滾動(dòng)條定位到某一點(diǎn)上,value為相對(duì)于滾動(dòng)條對(duì)象的百分比

};

</script>

</head>

<body>

<div id="obj">

<div>

當(dāng)前,企業(yè)管理領(lǐng)域刮起一股新的“時(shí)尚風(fēng)”,一些巨頭企業(yè)紛紛為自己“瘦身”,向更智慧和靈動(dòng)的業(yè)務(wù)轉(zhuǎn)型。據(jù)了解,甲骨文軟件正越來越多地把客戶的主要維護(hù)成本向咨詢顧問和第三方供應(yīng)商轉(zhuǎn)移。

“在中國本土,90%的甲骨文公司業(yè)務(wù)是通過這些合作伙伴開展的。此外,為了進(jìn)一步確保甲骨文的收入,CEO埃里森還購買了夏威夷的一個(gè)小島?!?Craig Guarente說道。

作為全球副總裁,Guarente非常清楚甲骨文的各項(xiàng)戰(zhàn)略。Guarente具有16年的工作經(jīng)歷,曾在合同管理、軟件許可證管理、軟件審計(jì)方面有豐富經(jīng)驗(yàn)。2011年離開甲骨文后,加入了Palisade公司,該公司的主要業(yè)務(wù)是幫助甲骨文客戶提供軟件承包、審計(jì)介入和許可證“優(yōu)化”等業(yè)務(wù)。

Guarente表示,Palisade公司業(yè)務(wù)發(fā)展非常迅速。作為第三方機(jī)構(gòu),Palisade幫助客戶贏得了大筆訂單,因?yàn)樗麄兏N近市場,能更準(zhǔn)確地理解用戶需求。

一般來說,咨詢公司是幫助客戶梳理他的實(shí)際需求及軟件本身能提供什么價(jià)值。Guarente通過實(shí)際操作做了詳細(xì)闡述。比如“你想建設(shè)一個(gè)新的數(shù)據(jù)中心,想要推出一個(gè)新的災(zāi)難恢復(fù)計(jì)劃,或者你想進(jìn)入云端,第三方公司首先會(huì)制定一個(gè)規(guī)劃圖,最后落實(shí),達(dá)成用戶最終目標(biāo)。如果把軟件部署在很多服務(wù)器的不同位置上,企業(yè)會(huì)有丟失軟件的現(xiàn)象。因?yàn)槠髽I(yè)軟件很少能得到許可證密鑰。但Oracle已經(jīng)形成習(xí)慣,每一個(gè)可能功能都可以在軟件環(huán)境下下載。Oracle數(shù)據(jù)庫管理員通過自動(dòng)負(fù)載的存儲(chǔ)庫(AWR)報(bào)告就可以診斷數(shù)據(jù)庫問題,這是常見的事,但需要你有一個(gè)Oracle數(shù)據(jù)庫包的許可?!?/P>

近年來,隨著軟件審計(jì)浪潮的興起,許多公司正在安裝軟件資產(chǎn)管理工具來確定他們使用什么軟件,能使用多長時(shí)間,一個(gè)企業(yè)多少人在用。但資深管理分析師Hegedus說到:“沒有任何工具能準(zhǔn)確理解企業(yè)規(guī)則,尤其是甲骨文的產(chǎn)品應(yīng)用,需要專業(yè)的第三方機(jī)構(gòu)來幫助用戶理解軟件規(guī)則?!?/P>

那么怎么才能為甲骨文的軟件應(yīng)用打補(bǔ)丁呢?甲骨文總裁馬克•赫德(Mark Hurd)上周表示:在企業(yè)應(yīng)用之初要把第三方機(jī)構(gòu)定義為服務(wù)支持方,這樣方便企業(yè)日后免費(fèi)獲得補(bǔ)丁修復(fù)和其他支持,而不只是購買產(chǎn)品知識(shí)產(chǎn)權(quán)。另外,企業(yè)要有效利用咨詢顧問,在了解企業(yè)使用什么軟件,協(xié)議應(yīng)該包含什么內(nèi)容時(shí),支持成本控制的第一步。不要盲目離開軟件供應(yīng)商,按照自己預(yù)測和猜想的流程采購軟件。

</div>

</div>

</body>

</html>

以上就是本文的全部內(nèi)容了,講解的十分詳細(xì),希望大家能夠喜歡。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:分享一則JavaScript滾動(dòng)條插件源碼
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)