Maison > interface Web > js tutoriel > JavaScript 图片切换展示效果alibaba拓展版_图象特效JavaScript 图片切换展示效果

JavaScript 图片切换展示效果alibaba拓展版_图象特效JavaScript 图片切换展示效果

PHP中文网
Libérer: 2016-05-16 19:01:11
original
921 Les gens l'ont consulté

看到alibaba的一个图片切换效果,感觉不错,想拿来用用。但代码一大堆的,看着昏,还是自己来吧。 由于有了做图片滑动展示效果的经验,做这个就容易得多了。

首先需要一个容器,设置它的overflow为hidden,position为relative;
容器里面还要一个滑动对象,设置它的position为absolute;
在initialize()函数里初始化一些属性。

在切换之前先执行Start()函数,进行相关设置,
主要是设置Index属性(索引)和_target属性(目标值): 

1

2

3

4

if(this.Index < 0){

this.Index = this._count - 1;

} else if (this.Index >= this._count){ this.Index = 0; }

this._target = -1 * this._parameter * this.Index;

Copier après la connexion

接着就执行Move()函数开始移动了,原理通过设置滑动对象的top(或left)来做出移动的效果,
而减速的效果就需要执行GetStep()函数来获取步长:

1

var iStep = (iTarget - iNow) / this.Step;用目标值减当前值再除以一个参数,得到步长,

Copier après la connexion

这样取得的步长在当前值越接近目标值时会越来越小,也做成了减速的效果,
然后在top(或left)的设置中加上这个步长,并设置定时器继续Move(),直到到达目标值:

1

2

this._slider.style[style] = (iNow + iStep) + "px";

this._timer = setTimeout(function(){ oThis.Move(); }, this.Time);

Copier après la connexion

下面例子里的容器结构:

1

2

3

4

5

6

7

8

9

10

11

12

<p class="container" id="idTransformView">

<ul class="slider" id="idSlider">

<li><img src="http://shundebk.cn/temp/1.jpg"/></li>

<li><img src="http://shundebk.cn/temp/2.jpg"/></li>

<li><img src="http://shundebk.cn/temp/3.gif"/></li>

</ul>

<ul class="num" id="idNum">

<li>1</li>

<li>2</li>

<li>3</li>

</ul>

</p>

Copier après la connexion

要美观的话需要css设置一下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

.container, .container *{margin:0; padding:0;}

.container{width:408px; height:168px; overflow:hidden;}

.slider{position:absolute;}

.slider li{ list-style:none;display:inline;}

.slider img{ width:408px; height:168px; display:block;}

.slider2{width:2000px;}

.slider2 li{float:left;}

.num{ position:absolute; right:5px; bottom:5px;}

.num li{

float: left;

color: #FF7300;

text-align: center;

line-height: 16px;

width: 16px;

height: 16px;

font-family: Arial;

font-size: 12px;

cursor: pointer;

overflow: hidden;

margin: 3px 1px;

border: 1px solid #FF7300;

background-color: #fff;

}

.num li.on{

color: #fff;

line-height: 21px;

width: 21px;

height: 21px;

font-size: 16px;

margin: 0 1px;

border: 0;

background-color: #FF7300;

font-weight: bold;

}

Copier après la connexion

样式的设置跟程序也有一定关系,例如宽和高,这里就不说明了。
接着就可以实例化了:

1

2

3

var tv = new TransformView ("idTransformView", "idSlider", 168, 3, {

onStart : function(){ Each(objs, function(o, i) { o.className = tv.Index == i ? "on" : ""; }) }//按钮样式

});

Copier après la connexion

这里主要有4个参数,分别是容器对象、滑动对象、切换参数和切换数量。
当程序是上下切换时,切换参数切换的高度,当左右切换时,是切换的宽度。
切换数量就是有多少个切换对象了,例如上面的例子就是3个。
最后的参数是一些设置:
属性: 默认值//说明
Up: true,//是否向上(否则向左)
Step: 5,//滑动变化率
Time: 10,//滑动延时
Auto: true,//是否自动转换
Pause: 2000,//停顿时间(Auto为true时有效)
onStart: function(){},//开始转换时执行
onFinish: function(){}//完成转换时执行
例子里设置了onStart属性,作用是在切换开始时,设置按钮的样式
例子里完整的测试代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

function Each(list, fun){

for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }

};

var objs = $("idNum").getElementsByTagName("li");

var tv = new TransformView("idTransformView", "idSlider", 168, 3, {

onStart : function(){ Each(objs, function(o, i) { o.className = tv.Index == i ? "on" : ""; }) }//按钮样式

});

tv.Start();

Each(objs, function (o, i){

o.onmouseover = function(){

o.className = "on";

tv.Auto = false;

tv.Index = i;

tv.Start();

}

o.onmouseout = function(){

o.className = "";

tv.Auto = true;

tv.Start();

}

})

Copier après la connexion

源码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

var $ = function (id) {

return "string" == typeof id ?

document.getElementById(id) : id;

};

 

var Class = {

create:

function() {

return function() {

this.initialize.apply(this, arguments);

}

}

}

 

Object.extend = function(destination, source) {

for (var property in source) {

destination[property] = source[property];

}

return destination;

}

 

var TransformView = Class.create();

TransformView.prototype = {

//容器对象,滑动对象,切换参数,切换数量

initialize:

function(container, slider, parameter, count, options) {

if(parameter <=

0 || count <= 0) return;

var oContainer = $(container), oSlider =

$(slider), oThis = this;

 

this.Index = 0;//当前索引

 

this._timer =

null;//定时器

this._slider = oSlider;//滑动对象

this._parameter =

parameter;//切换参数

this._count = count || 0;//切换数量

this._target = 0;//目标参数

 

this.SetOptions(options);

 

this.Up = !!this.options.Up;

this.Step = Math.abs(this.options.Step);

this.Time =

Math.abs(this.options.Time);

this.Auto = !!this.options.Auto;

this.Pause

= Math.abs(this.options.Pause);

this.onStart = this.options.onStart;

this.onFinish = this.options.onFinish;

 

oContainer.style.overflow =

"hidden";

oContainer.style.position = "relative";

 

oSlider.style.position = "absolute";

oSlider.style.top =

oSlider.style.left = 0;

},

//设置默认属性

SetOptions: function(options) {

this.options = {//默认值

Up: true,//是否向上(否则向左)

Step: 5,//滑动变化率

Time: 10,//滑动延时

Auto: true,//是否自动转换

Pause: 2000,//停顿时间(Auto为true时有效)

onStart: function(){},//开始转换时执行

onFinish: function(){}//完成转换时执行

};

Object.extend(this.options, options || {});

},

//开始切换设置

Start:

function() {

if(this.Index < 0){

this.Index = this._count - 1;

}

else if (this.Index >= this._count){ this.Index = 0; }

 

this._target =

-1 * this._parameter * this.Index;

this.onStart();

this.Move();

},

//移动

Move: function() {

clearTimeout(this._timer);

var oThis =

this, style = this.Up ? "top" : "left", iNow =

parseInt(this._slider.style[style]) || 0, iStep = this.GetStep(this._target,

iNow);

 

if (iStep != 0) {

this._slider.style[style] = (iNow + iStep)

+ "px";

this._timer = setTimeout(function(){ oThis.Move(); }, this.Time);

} else {

this._slider.style[style] = this._target + "px";

this.onFinish();

if (this.Auto) { this._timer = setTimeout(function(){

oThis.Index++; oThis.Start(); }, this.Pause); }

}

},

//获取步长

GetStep: function(iTarget, iNow) {

var iStep = (iTarget - iNow) /

this.Step;

if (iStep == 0) return 0;

if (Math.abs(iStep) < 1) return

(iStep > 0 ? 1 : -1);

return iStep;

},

//停止

Stop:

function(iTarget, iNow) {

clearTimeout(this._timer);

this._slider.style[this.Up ? "top" : "left"] = this._target + "px";

}

};

Copier après la connexion
Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers numéros
c++ appelle javascript
Depuis 1970-01-01 08:00:00
0
0
0
Qu’est-ce que le garbage collection JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Que sont les fonctions de hook JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Comment obtenir la date actuelle en JavaScript ?
Depuis 1970-01-01 08:00:00
0
0
0
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal