找回密码
 注册
搜索
免费空间 免费域名 免费AI 老牌主机商首月仅1美分!27美元/年!Spaceship优惠码 Namecheap优惠码阿里云2核2G3M新老续费同享99元/年!
查看: 243|回复: 9

[建站交流] 献上 [ Google Gravity ] JS代码

[复制链接]
发表于 2011-5-16 21:05:18 | 显示全部楼层 |阅读模式
觉得好就个我一些分吧~3Ku~
  1. var canvas;

  2. var delta = [0,0];
  3. var stage = [window.screenX,window.screenY,window.innerWidth,window.innerHeight];
  4. getBrowserDimensions();

  5. var isRunning = false;
  6. var isMouseDown = false;

  7. var worldAABB;
  8. var world;
  9. var iterations = 1;
  10. var timeStep = 1/25;

  11. var walls = new Array();
  12. var wall_thickness = 200;
  13. var wallsSetted = false;

  14. var mouseJoint;
  15. var mouseX = 0;
  16. var mouseY = 0;

  17. var mouseOnClick = new Array();

  18. var timer = 0;

  19. var elements = new Array();
  20. var bodies = new Array();
  21. var properties = new Array();

  22. var gWebSearch;
  23. var imFeelingLuckyMode = false;
  24. var resultBodies = new Array();

  25. var orientation = { x: 0, y: 1 };

  26. init();

  27. if (location.search != "")
  28. {
  29.         var params = location.search.substr(1).split("&")

  30.         for (var i = 0; i < params.length; i++)
  31.         {
  32.                 var param = params[i].split("=");

  33.                 if (param[0] == "q")
  34.                 {
  35.                         document.getElementById('q').value = param[1];
  36.                         run();
  37.                         break;
  38.                 }
  39.         }
  40. }

  41. // GOOGLE API

  42. function onLoad()
  43. {
  44.         gWebSearch = new GwebSearch();
  45.         gWebSearch.setResultSetSize(GSearch.SMALL_RESULTSET);
  46.         gWebSearch.setSearchCompleteCallback(null, onWebSearch);

  47.         if (document.getElementById('q').value != '')
  48.                 search();
  49. }

  50. function onWebSearch()
  51. {
  52.         if(imFeelingLuckyMode)
  53.         {
  54.                 location.href = gWebSearch.results[0].unescapedUrl;
  55.                 return;
  56.         }
  57.        
  58.         for (var i = 0; i < gWebSearch.results.length; i++)
  59.                 addResult(gWebSearch.results[i]);
  60. }

  61. //

  62. function init()
  63. {
  64.         canvas = document.getElementById('canvas');
  65.        
  66.         document.onmousedown = onDocumentMouseDown;
  67.         document.onmouseup = onDocumentMouseUp;
  68.         document.onmousemove = onDocumentMouseMove;
  69.         document.ondblclick = onDocumentDoubleClick;
  70.        
  71.         document.onkeypress = onDocumentKeyPress;


  72.         document.addEventListener('touchstart', onDocumentTouchStart, false);
  73.         document.addEventListener('touchmove', onDocumentTouchMove, false);
  74.         document.addEventListener('touchend', onDocumentTouchEnd, false);

  75.         window.addEventListener( 'deviceorientation', onWindowDeviceOrientation, false );

  76.         // init box2d
  77.        
  78.         worldAABB = new b2AABB();
  79.         worldAABB.minVertex.Set(-200, -200);
  80.         worldAABB.maxVertex.Set( screen.width + 200, screen.height + 200);

  81.         world = new b2World(worldAABB, new b2Vec2(0, 0), true);
  82.        
  83.         // walls       
  84.         setWalls();

  85.         // Get box2d elements
  86.        
  87.         elements = getElementsByClass("box2d");
  88.                
  89.         for (i = 0; i < elements.length; i++) {

  90.                 var element = elements[i];
  91.                 properties[i] = findPos(element);
  92.                 properties[i][2] = element.offsetWidth;
  93.                 properties[i][3] = element.offsetHeight;
  94.         }
  95.        
  96.         for (i = 0; i < elements.length; i++) {
  97.                 var element = elements[i];
  98.                 element.style.position = 'absolute';
  99.                 element.style.left = properties[i][0] + 'px';
  100.                 element.style.top = properties[i][1] + 'px';
  101.                 // element.style.backgroundColor = '#ffff00';
  102.                 element.onmousedown = onElementMouseDown;
  103.                 element.onmouseup = onElementMouseUp;
  104.                 element.onclick = onElementClick;
  105.                
  106.                 bodies[i] = createBox(world, properties[i][0] + (properties[i][2] >> 1), properties[i][1] + (properties[i][3] >> 1), properties[i][2] / 2, properties[i][3] / 2, false);               
  107.         }
  108. }

  109. function run() {

  110.         isRunning = true;
  111.         setInterval(loop, 25);       
  112. }

  113. //

  114. function onDocumentMouseDown() {

  115.         isMouseDown = true;
  116.         return false;
  117. }

  118. function onDocumentMouseUp() {

  119.         isMouseDown = false;
  120.         return false;
  121. }

  122. function onDocumentMouseMove() {

  123.         if (!isRunning)
  124.                 run();

  125.         mouseX = window.event.clientX;
  126.         mouseY = window.event.clientY;
  127. }

  128. function onDocumentDoubleClick() {

  129.         reset();
  130. }

  131. function onDocumentKeyPress(event) {

  132.         if (event.charCode == 13)
  133.                 search();
  134. }

  135. function onDocumentTouchStart( event ) {

  136.         if(event.touches.length == 1) {

  137.                 event.preventDefault();

  138.                 if (!isRunning)
  139.                         run();

  140.                 // Faking double click for touch devices

  141.                 var now = new Date().getTime();

  142.                 if (now - timeOfLastTouch  < 250) {

  143.                         reset();
  144.                         return;
  145.                 }

  146.                 timeOfLastTouch = now;

  147.                 mouseX = event.touches[0].pageX;
  148.                 mouseY = event.touches[0].pageY;
  149.                 isMouseDown = true;
  150.         }
  151. }

  152. function onDocumentTouchMove( event ) {

  153.         if(event.touches.length == 1) {

  154.                 event.preventDefault();

  155.                 mouseX = event.touches[0].pageX;
  156.                 mouseY = event.touches[0].pageY;
  157.         }
  158. }

  159. function onDocumentTouchEnd( event ) {

  160.         if(event.touches.length == 0) {

  161.                 event.preventDefault();
  162.                 isMouseDown = false;
  163.         }
  164. }

  165. function onWindowDeviceOrientation( event ) {

  166.         if ( event.beta ) {

  167.                 orientation.x = Math.sin( event.gamma * Math.PI / 180 );
  168.                 orientation.y = Math.sin( ( Math.PI / 4 ) + event.beta * Math.PI / 180 );

  169.         }

  170. }

  171. //

  172. function onElementMouseDown() {

  173.         mouseOnClick[0] = window.event.clientX;
  174.         mouseOnClick[1] = window.event.clientY;       
  175.         return false;
  176. }

  177. function onElementMouseUp() {

  178.         return false;
  179. }

  180. function onElementClick() {

  181.         var range = 5;
  182.        
  183.         if (mouseOnClick[0] > window.event.clientX + range || mouseOnClick[0] < window.event.clientX - range && mouseOnClick[1] > window.event.clientY + range || mouseOnClick[1] < window.event.clientY - range)
  184.                 return false;
  185.        
  186.         if (this == document.getElementById('btnG')) search();
  187.         if (this == document.getElementById('btnI')) imFeelingLucky();
  188.         if (this == document.getElementById('q')) document.f.q.focus();
  189. }

  190. // API STUFF

  191. function search() {

  192.         if (!isRunning)
  193.                 run();
  194.        
  195.         onDocumentDoubleClick(); // clean
  196.         gWebSearch.execute(document.getElementById('q').value);
  197.         return false;
  198. }

  199. function imFeelingLucky() {

  200.         imFeelingLuckyMode = true;
  201.         gWebSearch.execute(document.getElementById('q').value);
  202.         return false;       
  203. }

  204. function addResult(data) {

  205.         var element = document.createElement('div');
  206.         element.innerHTML = '<div><h3 class=r><a href="' + data.unescapedUrl + '" class=l onmousedown="return clk(this.href,\'\',\'\',\'res\',\'1\',\'&amp;sig2=3Ti89FTuSYfE6a-5k1jjKQ\')">' + data.title + '</a></h3><span style=display:inline-block><button class=w10 title="Promote"></button><button class=w20 title="Remove"></button></span><div class="s">' + data.content + '<br><cite>' + data.visibleUrl + '</cite></div>';
  207.        
  208.         canvas.appendChild(element);
  209.         properties.push([Math.random() * (window.innerWidth / 2),-200,600,element.offsetHeight]);
  210.        
  211.         var i = properties.length - 1;

  212.         element.style.position = 'absolute';
  213.         element.style.left = 0 + 'px';
  214.         element.style.top = -100 + 'px';
  215.         element.style.backgroundColor = '#ffffff';
  216.         element.onmousedown = onElementMouseDown;
  217.         element.onmouseup = onElementMouseUp;
  218.         element.onclick = onElementClick;

  219.         elements[i] = element;

  220.         resultBodies.push( bodies[i] = createBox(world, properties[i][0] + (properties[i][2] >> 1), properties[i][1] + (properties[i][3] >> 1), properties[i][2] / 2, properties[i][3] / 2, false, element) );
  221.        
  222. }

  223. function reset() {

  224.         for (i = 0; i < resultBodies.length; i++) {

  225.                 var body = resultBodies[i]
  226.                 canvas.removeChild( body.GetUserData().element );
  227.                 world.DestroyBody(body);
  228.                 body = null;
  229.         }
  230.        
  231.         resultBodies = new Array();
  232. }

  233. //

  234. function loop() {

  235.         if (getBrowserDimensions())
  236.                 setWalls();

  237.         delta[0] += (0 - delta[0]) * .5;
  238.         delta[1] += (0 - delta[1]) * .5;
  239.        
  240.         world.m_gravity.x = orientation.x * 350 + delta[0];
  241.         world.m_gravity.y = orientation.y * 350 + delta[1];

  242.         mouseDrag();
  243.         world.Step(timeStep, iterations);       
  244.        
  245.         for (i = 0; i < elements.length; i++) {

  246.                 var body = bodies[i];
  247.                 var element = elements[i];
  248.                
  249.                 element.style.left = (body.m_position0.x - (properties[i][2] >> 1)) + 'px';
  250.                 element.style.top = (body.m_position0.y - (properties[i][3] >> 1)) + 'px';

  251.                 var rotationStyle = 'rotate(' + (body.m_rotation0 * 57.2957795) + 'deg)';

  252.                 element.style.WebkitTransform = rotationStyle;
  253.                 element.style.MozTransform = rotationStyle;
  254.                 element.style.OTransform = rotationStyle;
  255.         }
  256. }


  257. // .. BOX2D UTILS

  258. function createBox(world, x, y, width, height, fixed, element) {

  259.         if (typeof(fixed) == 'undefined')
  260.                 fixed = true;

  261.         var boxSd = new b2BoxDef();

  262.         if (!fixed)
  263.                 boxSd.density = 1.0;

  264.         boxSd.extents.Set(width, height);

  265.         var boxBd = new b2BodyDef();
  266.         boxBd.AddShape(boxSd);
  267.         boxBd.position.Set(x,y);
  268.         boxBd.userData = {element: element};

  269.         return world.CreateBody(boxBd)
  270. }

  271. function mouseDrag() {

  272.         // mouse press
  273.         if (isMouseDown && !mouseJoint) {

  274.                 var body = getBodyAtMouse();
  275.                
  276.                 if (body) {

  277.                         var md = new b2MouseJointDef();
  278.                         md.body1 = world.m_groundBody;
  279.                         md.body2 = body;
  280.                         md.target.Set(mouseX, mouseY);
  281.                         md.maxForce = 30000.0 * body.m_mass;
  282.                         md.timeStep = timeStep;
  283.                         mouseJoint = world.CreateJoint(md);
  284.                         body.WakeUp();
  285.                 }
  286.         }
  287.        
  288.         // mouse release
  289.         if (!isMouseDown) {

  290.                 if (mouseJoint) {

  291.                         world.DestroyJoint(mouseJoint);
  292.                         mouseJoint = null;
  293.                 }
  294.         }
  295.        
  296.         // mouse move
  297.         if (mouseJoint) {

  298.                 var p2 = new b2Vec2(mouseX, mouseY);
  299.                 mouseJoint.SetTarget(p2);
  300.         }
  301. }

  302. function getBodyAtMouse() {

  303.         // Make a small box.
  304.         var mousePVec = new b2Vec2();
  305.         mousePVec.Set(mouseX, mouseY);
  306.        
  307.         var aabb = new b2AABB();
  308.         aabb.minVertex.Set(mouseX - 1, mouseY - 1);
  309.         aabb.maxVertex.Set(mouseX + 1, mouseY + 1);

  310.         // Query the world for overlapping shapes.
  311.         var k_maxCount = 10;
  312.         var shapes = new Array();
  313.         var count = world.Query(aabb, shapes, k_maxCount);
  314.         var body = null;
  315.        
  316.         for (var i = 0; i < count; ++i) {

  317.                 if (shapes[i].m_body.IsStatic() == false) {

  318.                         if ( shapes[i].TestPoint(mousePVec) ) {

  319.                                 body = shapes[i].m_body;
  320.                                 break;
  321.                         }
  322.                 }
  323.         }

  324.         return body;
  325. }

  326. function setWalls() {

  327.         if (wallsSetted) {

  328.                 world.DestroyBody(walls[0]);
  329.                 world.DestroyBody(walls[1]);
  330.                 world.DestroyBody(walls[2]);
  331.                 world.DestroyBody(walls[3]);
  332.                
  333.                 walls[0] = null;
  334.                 walls[1] = null;
  335.                 walls[2] = null;
  336.                 walls[3] = null;
  337.         }
  338.        
  339.         walls[0] = createBox(world, stage[2] / 2, - wall_thickness, stage[2], wall_thickness);
  340.         walls[1] = createBox(world, stage[2] / 2, stage[3] + wall_thickness, stage[2], wall_thickness);
  341.         walls[2] = createBox(world, - wall_thickness, stage[3] / 2, wall_thickness, stage[3]);
  342.         walls[3] = createBox(world, stage[2] + wall_thickness, stage[3] / 2, wall_thickness, stage[3]);       
  343.        
  344.         wallsSetted = true;
  345. }

  346. // .. UTILS

  347. function getElementsByClass( searchClass ) {

  348.         var classElements = new Array();
  349.         var els = document.getElementsByTagName('*');
  350.         var elsLen = els.length

  351.         for (i = 0, j = 0; i < elsLen; i++) {

  352.                 var classes = els[i].className.split(' ');
  353.                 for (k = 0; k < classes.length; k++)
  354.                         if ( classes[k] == searchClass )
  355.                                 classElements[j++] = els[i];
  356.         }

  357.         return classElements;
  358. }

  359. function findPos(obj) {

  360.         var curleft = curtop = 0;

  361.         if (obj.offsetParent) {

  362.                 do {

  363.                         curleft += obj.offsetLeft;
  364.                         curtop += obj.offsetTop;

  365.                 } while (obj = obj.offsetParent);
  366.         }

  367.         return [curleft,curtop];
  368. }

  369. function getBrowserDimensions() {

  370.         var changed = false;
  371.                
  372.         if (stage[0] != window.screenX) {

  373.                 delta[0] = (window.screenX - stage[0]) * 50;
  374.                 stage[0] = window.screenX;
  375.                 changed = true;
  376.         }
  377.        
  378.         if (stage[1] != window.screenY) {

  379.                 delta[1] = (window.screenY - stage[1]) * 50;
  380.                 stage[1] = window.screenY;
  381.                 changed = true;
  382.         }
  383.        
  384.         if (stage[2] != window.innerWidth) {

  385.                 stage[2] = window.innerWidth;
  386.                 changed = true;
  387.         }
  388.        
  389.         if (stage[3] != window.innerHeight) {

  390.                 stage[3] = window.innerHeight;
  391.                 changed = true;
  392.         }
  393.        
  394.         return changed;
  395. }
复制代码
直接地址:http://mrdoob.com/projects/chrom ... _gravity/js/Main.js
发表于 2011-5-16 21:11:38 | 显示全部楼层
好长
发表于 2011-5-16 21:13:27 | 显示全部楼层
怎么用。。
发表于 2011-5-16 23:24:16 | 显示全部楼层
干嘛使?
发表于 2011-5-17 07:59:43 | 显示全部楼层
什么东西
发表于 2011-5-17 08:03:28 | 显示全部楼层
不明真相
发表于 2011-5-17 08:56:55 | 显示全部楼层
gravity??这不是推客户端马
发表于 2011-5-17 09:49:32 | 显示全部楼层
求解释
发表于 2011-5-17 12:51:08 | 显示全部楼层
发表于 2011-5-18 01:04:28 | 显示全部楼层
不知何用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|免费吧论坛

GMT+8, 2024-11-30 14:36 , Processed in 0.023983 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表