首页 > 语言 > JavaScript > 正文

JS实现跟随鼠标立体翻转图片的方法

2024-05-06 16:19:14
字体:
来源:转载
供稿:网友

这篇文章主要介绍了JS实现跟随鼠标立体翻转图片的方法,涉及javascript操作图片翻转的相关技巧,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了JS实现跟随鼠标立体翻转图片的方法。分享给大家供大家参考。具体实现方法如下:

 

 
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
  2. "http://www.w3.org/TR/html4/strict.dtd"
  3. <html> 
  4. <head> 
  5. <title>Wanna tell her - interactive DHTML</title> 
  6. <meta http-equiv="imagetoolbar" content="no"
  7. <style type="text/css"
  8. html { 
  9. overflow: hidden; 
  10. body { 
  11. position: absolute; 
  12. margin: 0px; 
  13. padding: 0px; 
  14. background: #fff; 
  15. width: 100%; 
  16. height: 100%; 
  17. #screen { 
  18. position: absolute; 
  19. left: 10%; 
  20. top: 10%; 
  21. width: 80%; 
  22. height: 80%; 
  23. background: #fff; 
  24. #screen img { 
  25. position: absolute; 
  26. cursor: pointer; 
  27. width: 0px; 
  28. height: 0px; 
  29. -ms-interpolation-mode:nearest-neighbor; 
  30. #bankImages { 
  31. visibility: hidden; 
  32. #FPS { 
  33. position: absolute; 
  34. right: 5px; 
  35. bottom: 5px; 
  36. font-size: 10px; 
  37. color: #666; 
  38. font-family: verdana; 
  39. </style> 
  40. <script type="text/javascript"
  41. /* ==== Easing function ==== */ 
  42. var Library = {}; 
  43. Library.ease = function () { 
  44. this.target = 0; 
  45. this.position = 0; 
  46. this.move = function (target, speed) { 
  47. this.position += (target - this.position) * speed; 
  48. var tv = { 
  49. /* ==== variables ==== */ 
  50. O : [], 
  51. fps : 0, 
  52. screen : {}, 
  53. angle : { 
  54. x : new Library.ease(), 
  55. y : new Library.ease() 
  56. }, 
  57. camera : { 
  58. x : new Library.ease(), 
  59. y : new Library.ease() 
  60. }, 
  61. create3DHTML : function (i, x, y, z, sw, sh) { 
  62. /* ==== create HTML image element ==== */ 
  63. var o = document.createElement('img'); 
  64. o.src = i.src; 
  65. tv.screen.obj.appendChild(o); 
  66. /* ==== 3D coordinates ==== */ 
  67. o.point3D = { 
  68. x : x, 
  69. y : y, 
  70. z : new Library.ease(), 
  71. sw : sw, 
  72. sh : sh, 
  73. w : i.width, 
  74. h : i.height 
  75. }; 
  76. o.point3D.z.target = z; 
  77. /* ==== push object ==== */ 
  78. o.point2D = {}; 
  79. tv.O.push(o); 
  80. /* ==== on mouse over event ==== */ 
  81. o.onmouseover = function () { 
  82. if (this != tv.o) { 
  83. this.point3D.z.target = tv.mouseZ; 
  84. tv.camera.x.target = this.point3D.x; 
  85. tv.camera.y.target = this.point3D.y; 
  86. if (tv.o) tv.o.point3D.z.target = 0; 
  87. tv.o = this
  88. return false
  89. /* ==== on mousedown event ==== */ 
  90. o.onmousedown = function () { 
  91. if (this == tv.o) { 
  92. if (this.point3D.z.target == tv.mouseZ) this.point3D.z.target = 0; 
  93. else { 
  94. tv.o = false
  95. this.onmouseover(); 
  96. /* ==== main 3D function ==== */ 
  97. o.animate = function () { 
  98. /* ==== 3D coordinates ==== */ 
  99. var x = this.point3D.x - tv.camera.x.position; 
  100. var y = this.point3D.y - tv.camera.y.position; 
  101. this.point3D.z.move(this.point3D.z.target, this.point3D.z.target ? .15 : .08); 
  102. /* ==== rotations ==== */ 
  103. var xy = tv.angle.cx * y - tv.angle.sx * this.point3D.z.position; 
  104. var xz = tv.angle.sx * y + tv.angle.cx * this.point3D.z.position; 
  105. var yz = tv.angle.cy * xz - tv.angle.sy * x; 
  106. var yx = tv.angle.sy * xz + tv.angle.cy * x; 
  107. /* ==== 2D transform ==== */ 
  108. var scale = tv.camera.focalLength / (tv.camera.focalLength + yz); 
  109. x = yx * scale; 
  110. y = xy * scale; 
  111. var w = Math.round(Math.max(0, this.point3D.w * scale * this.point3D.sw)); 
  112. var h = Math.round(Math.max(0, this.point3D.h * scale * this.point3D.sh)); 
  113. /* ==== HTML rendering ==== */ 
  114. var o = this.style; 
  115. o.left = Math.round(x + tv.screen.w - w * .5) + 'px'
  116. o.top = Math.round(y + tv.screen.h - h * .5) + 'px'
  117. o.width = w + 'px'
  118. o.height = h + 'px'
  119. o.zIndex = 10000 + Math.round(scale * 1000); 
  120. }, 
  121. /* ==== init script ==== */ 
  122. init : function (structure, FL, mouseZ, rx, ry) { 
  123. this.screen.obj = document.getElementById('screen'); 
  124. this.screen.obj.onselectstart = function () { return false; } 
  125. this.screen.obj.ondrag = function () { return false; } 
  126. this.mouseZ = mouseZ; 
  127. this.camera.focalLength = FL; 
  128. this.angle.rx = rx; 
  129. this.angle.ry = ry; 
  130. /* ==== create objects ==== */ 
  131. var i = 0, o; 
  132. while( o = structure[i++] ) 
  133. this.create3DHTML(o.img, o.x, o.y, o.z, o.sw, o.sh); 
  134. /* ==== start script ==== */ 
  135. this.resize(); 
  136. mouse.y = this.screen.y + this.screen.h; 
  137. mouse.x = this.screen.x + this.screen.w; 
  138. /* ==== loop ==== */ 
  139. setInterval(tv.run, 16); 
  140. setInterval(tv.dFPS, 1000); 
  141. }, 
  142. /* ==== resize window ==== */ 
  143. resize : function () { 
  144. var o = tv.screen.obj; 
  145. if (o) { 
  146. tv.screen.w = o.offsetWidth / 2; 
  147. tv.screen.h = o.offsetHeight / 2; 
  148. for(tv.screen.x=0,tv.screen.y=0;o!=null;o=o.offsetParent){ 
  149. tv.screen.x += o.offsetLeft; 
  150. tv.screen.y += o.offsetTop; 
  151. }, 
  152. /* ==== main loop ==== */ 
  153. run : function () { 
  154. tv.fps++; 
  155. /* ==== motion ease ==== */ 
  156. tv.angle.x.move(-(mouse.y-tv.screen.h-tv.screen.y)*tv.angle.rx,.1); 
  157. tv.angle.y.move((mouse.x-tv.screen.w-tv.screen.x)*tv.angle.ry,.1); 
  158. tv.camera.x.move(tv.camera.x.target, .025); 
  159. tv.camera.y.move(tv.camera.y.target, .025); 
  160. /* ==== angles sin and cos ==== */ 
  161. tv.angle.cx = Math.cos(tv.angle.x.position); 
  162. tv.angle.sx = Math.sin(tv.angle.x.position); 
  163. tv.angle.cy = Math.cos(tv.angle.y.position); 
  164. tv.angle.sy = Math.sin(tv.angle.y.position); 
  165. /* ==== loop through images ==== */ 
  166. var i = 0, o; 
  167. while( o = tv.O[i++] ) o.animate(); 
  168. }, 
  169. /* ==== trace frames per seconds ==== */ 
  170. dFPS : function () { 
  171. document.getElementById('FPS').innerHTML = tv.fps + ' FPS'
  172. tv.fps = 0; 
  173. /* ==== global mouse position ==== */ 
  174. var mouse = { 
  175. x : 0, 
  176. y : 0 
  177. document.onmousemove = function(e) { 
  178. if (window.event) e = window.event; 
  179. mouse.x = e.clientX; 
  180. mouse.y = e.clientY; 
  181. return false
  182. /* ==== starting script ==== */ 
  183. onload = function() { 
  184. onresize = tv.resize; 
  185. /* ==== build grid ==== */ 
  186. var img = document.getElementById('bankImages').getElementsByTagName('img'); 
  187. var structure = []; 
  188. for (var i = -300; i <= 300; i += 120) 
  189. for (var j = -300; j <= 300; j += 120) 
  190. structure.push({ img:img[0], x:i, y:j, z:0, sw:.5, sh:.5 }); 
  191. /* ==== let's go ==== */ 
  192. tv.init(structure, 350, -200, .005, .0025); 
  193. </script> 
  194. </head> 
  195. <body> 
  196. <div id="screen"></div> 
  197. <div id="bankImages"
  198. <img alt="" src="images/p2.jpg"
  199. </div> 
  200. <div id="FPS"></div> 
  201. </body> 
  202. </html> 

希望本文所述对大家的javascript程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选