<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel rdf:about="https://let.hatelabo.jp/nori_17/rss">
    <link>https://let.hatelabo.jp/nori_17/rss</link>
    <description></description>
    <title>Bookmarklets from nori_17</title>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://let.hatelabo.jp/nori_17/let/gYC-yrHNm5qkWg"/>
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://let.hatelabo.jp/nori_17/let/gYC-yrHNm5qkWg">
    <link>https://let.hatelabo.jp/nori_17/let/gYC-yrHNm5qkWg</link>
    <dc:date>2010-07-01T07:06:21Z</dc:date>
    <description>リンクが逃げる逃げる</description>
    <dc:creator>nori_17</dc:creator>
    <title>[Let] RunAway</title>
    <content:encoded>&lt;a href="javascript:%22https%3A%2F%2Flet.st-hatelabo.com%2Fnori_17%2Flet%2FgYC-yrHNm5qkWg.bookmarklet.js%20%28arg%29%22.replace%28%2F%28%5CS%2B%29%5Cs%2B%28%5CS%2A%29%2F%2Cfunction%28s%2Curl%2Carg%29%7Bs%3Ddocument.createElement%28%22script%22%29%3Bs.charset%3D%22utf-8%22%3Bs.src%3Durl%2B%22%3Fs%3D%22%2BencodeURIComponent%28arg%29%3Bdocument.body.appendChild%28s%29%7D%29%3Bvoid%280%29%3B"&gt;RunAway&lt;/a&gt;&lt;pre&gt;/*
 * @title RunAway
 * @description リンクが逃げる逃げる
 * @author nori (http://twitter.com/5509)
 * @base script hisasann (http://twitter.com/hisasann)
 * @include http://*
 * @license MIT License
 */

(function() {
 
 	var mouseX, mouseY, d = document, dE = d.documentElement,
 		rate = 60,
 		instance = 3000,
 		anchors = d.getElementsByTagName('a');
 		
 	addEvent(d, 'mousemove', function(e) {
 		mouseY = e.pageY ? e.pageY : e.clientY + dE.scrollTop;
 		mouseX = e.pageX ? e.pageX : e.clientX + dE.scrollLeft;
 	});
 	
 	mover(anchors, instance, rate);
 	
	function mover(selector, instance, rate) {
		var firstPointX = [],
			firstPointY = [];
			
	 	for ( var i=0; i&amp;lt;anchors.length; i++ ) {
			firstPointX[i] = anchors[i].offsetLeft;
			firstPointY[i] = anchors[i].offsetTop;
			
			var span = d.createElement('span');
			setStyles(span, {
				display: 'inline-block',
				width: anchors[i].offsetWidth+'px'
			});
			insertAfter(anchors[i].parentNode, span, anchors[i]);
		}					

		(function(){
			for ( var i=0; i&amp;lt;anchors.length; i++ ) {
				var elem = anchors[i],
					offsetY = elem.offsetTop,
					offsetX = elem.offsetLeft,
					theta = Math.atan2(offsetY - mouseY, offsetX - mouseX),
					d = instance / Math.sqrt(Math.pow(mouseX - offsetX, 2) + Math.pow(mouseY - offsetY, 2)),
					left = parseInt(offsetX) + d * Math.cos(theta) + (firstPointX[i] - offsetX) * 0.1,
					top = parseInt(offsetY) + d * Math.sin(theta) + (firstPointY[i] - offsetY) * 0.1;
					
				if ( !isNaN(top) &amp;amp;&amp;amp; !isNaN(left) ) {
					setStyles(elem, {
						left: left+'px',
						top: top+'px'
					});
				} else {
					setStyles(elem, {
						position: 'absolute'
					});
				}
			}
			
			setTimeout(arguments.callee, rate);
		})();
	}
 		
 	function addEvent(elm, listener, fn) {
		try {
			elm.addEventListener(listener, fn, false);
		} catch (e) {
			elm.attachEvent('on' + listener, fn);
		}
	}
	
	function setStyles(elm, hash) {
		for ( var c in hash ) {
			elm.style[c] = hash[c];
		}
	}

	function insertAfter(parent, node, referenceNode) {
		parent.insertBefore(node, referenceNode.nextSibling);
	}
 
 })();&lt;/pre&gt;</content:encoded>
  </item>
</rdf:RDF>
