照片墙效果---->能成功运行。js+html+css

<!doctype html>

<html lang="en">

<head>

<meta charset="UTF-8">

<title>My照片墙</title>

<style type="text/css">

*{

padding:0;

margin: 0;

}

li,ul{

list-style: none;

}

#parent{

margin: 0 auto;

width: 830px;

height: 600px;

margin-top:50px;

}

#parent li{

float: left;

height: 250px;

margin: 10px;

width: 250px;

}

</style>

<script type="text/javascript">

/**

*

*将浮动布局转换为绝对定位布局

*/

window.onload=function(){

var parent = document.getElementById("parent");

var son    = document.getElementsByTagName("li");

var start1=document.getElementById("start");

var lastindex=0;

var arr=[];

//存储定位前的li的left,top值。

for(var i=0;i<son.length;i++){

arr.push([son[i].offsetLeft,son[i].offsetTop]);

son[i].index=i;

}

//转换为定位,并赋值

for(var i=0;i<son.length;i++){

son[i].style.position="absolute";

son[i].style.left=arr[i][0]+"px";

son[i].style.top =arr[i][1]+"px";

son[i].style.margin=0;

}

for(var i=0;i<son.length;i++){

drag(son[i]);;

}

//返回一个X-Y之间的随机数

function stochastic(x,y){

//四舍五入和0-1之间的随机数

return Math.round(Math.random()*(y-x)+x);

}

//-----待改进,随机移动有问题,------

start1.onclick=function(){

var arr1 =[0,1,2,3,4,5,6,7,8];

var temp=0;

var newarr=arr1.sort(function(a,b){

return Math.random()-0.5;

});

//alert(newarr); 2,0,3,4,7,8,5,6,1

//console.log(kleft+":"+ktop);

var kleft=0;

var ktop=0;

for(var i=0;i<son.length;i++){

kleft=arr[newarr[i]][0];

ktop=arr[newarr[i]][1];

console.log(kleft+":"+ktop);

startMove(son[i],{‘left‘:kleft,‘top‘:ktop});

son[i].index=newarr[i];

}

}

//改进版------移动函数

function startMove ( obj,json, endFn ){

clearInterval( obj.timer );

var a= false;

var b=false;

obj.timer = setInterval(function () {

var dir=13;

for(var attr in json){

var target=json[attr];

dir = parseInt(getStyle( obj, attr )) < target ? dir : -dir;

var speed = parseInt(getStyle( obj, attr )) + dir; // 步长

if ( speed > target && dir > 0 ||  speed < target && dir < 0  ) {

speed = target;

}

obj.style[attr] = speed + ‘px‘;

if ( speed == target&&attr==‘left‘) {

a=true;

}else if(speed == target&&attr==‘top‘){

b=true;

}

if(a&&b){

clearInterval(obj.timer);

endFn&&endFn();

}

}

}, 30);

}

//拖拽函数

function drag(obj){

var disX=0;

var disY=0;

++lastindex;

obj. = function(ev){

obj.style.zIndex=lastindex;

var ev = ev||window.event;

disX = ev.clientX - obj.offsetLeft;

disY = ev.clientY - obj.offsetTop;

document. = function(ev){

var ev = ev||window.event;

obj.style.left=ev.clientX - disX + "px";

obj.style.top =ev.clientY - disY + "px";

/*碰撞测试

for(var i =0;i<son.length;i++){

if(impectCheck(obj,son[i])&&obj!=son[i]){

son[i].style.border="3px solid red";

}else{

son[i].style.border="";

}

}

*/

//清楚所有样式

for(var i =0;i<son.length;i++){

son[i].style.border="";

}

var oLi= nearLi(obj);

/*

*这里的值有问题!

*/

oLi.style.border="3px solid red";

};

document. = function(){

document.onmousemove=null;

document.onmouseup=null;

//交换位置

//最近的li

var oLi= nearLi(obj);

var temp=0;

//拖拽的值

var nowleft =arr[obj.index][0];

var nowtop = arr[obj.index][1];

if(oLi){

//被碰撞的值

var newleft =arr[oLi.index][0];

var newtop = arr[oLi.index][1]

//console.log(arr[obj.index][1])

//console.log(arr[oLi.index][1])

//alert(arr[oLi.index][0]);

//console.log(oLi)

doMove( oLi, ‘left‘, 50, nowleft,function(){

//console.log(oLi)

doMove( oLi, ‘top‘, 50,nowtop ,function(){

//console.log(oLi)

});

});

doMove( obj, ‘left‘, 50, newleft,function(){

doMove( obj, ‘top‘, 50, newtop,function(){

});

});

//console.log(oLi.index);

//console.log(obj.index);

//清楚样式

oLi.style.border="";

//交换索引

temp=oLi.index;

oLi.index=obj.index;

obj.index=temp;

//console.log(obj.index);

}else{

doMove( obj, ‘left‘, 50, nowleft,function(){

doMove( obj, ‘top‘, 50, nowtop);

});

}

};

return false;

};

}

//找出最近的li

function nearLi(obj){

var min=9999;

var index=-1;

for(var i=0;i<son.length;i++){

if(impectCheck(obj,son[i])&&obj!=son[i]){

var c =range(obj,son[i]);

if(c<min){

min=c;

index=i;

}

}

}

//判断是否碰撞了。

var arr = index!=-1?son[index]:false;

return arr ;

}

}

//获取样式的值

function getStyle ( obj, attr ) { return obj.currentStyle?obj.currentStyle[attr] : getComputedStyle( obj )[attr]; }

//勾股定理找出斜边---->最近的li

function range(obj1,obj2){

var a=obj1.offsetLeft-obj2.offsetLeft;

var b=obj1.offsetTop-obj2.offsetTop;

return Math.sqrt(a*a+b*b);

}

//碰撞检测函数

function impectCheck(obj1,obj2){

var L1 = obj1.offsetLeft;

var R1 = obj1.offsetLeft+obj1.offsetWidth;

var T1 = obj1.offsetTop;

var B1 = obj1.offsetTop+obj1.offsetHeight;

var L2 = obj2.offsetLeft;

var R2 = obj2.offsetLeft+obj2.offsetWidth;

var T2 = obj2.offsetTop;

var B2 = obj2.offsetTop+obj2.offsetHeight;

if(L2>R1||L1>R2||T2>B1||T1>B2){

return false;

}else{

return true;

}

}

//移动函数

function doMove ( obj, attr, dir, target, endFn ) {

var target=target;

dir = parseInt(getStyle( obj, attr )) < target ? dir : -dir;

clearInterval( obj.timer );

obj.timer = setInterval(function () {

var speed = parseInt(getStyle( obj, attr )) + dir; // 步长

if ( speed > target && dir > 0 ||  speed < target && dir < 0  ) {

speed = target;

}

obj.style[attr] = speed + ‘px‘;

if ( speed == target) {

clearInterval( obj.timer );

/*

if ( endFn ) {

endFn();

}

*/

endFn && endFn();

}

}, 30);

}

</script>

</head>

<body>

<div id="start" style="background:#698B22;width:120px;height:50px;cursor: pointer;text-align:center;line-height:50px;position: absolute;top:2px;left:45%">

<b>打乱顺序</b>

</div>

<ul id="parent">

<li><img src="images/PX_5.jpg"/></li>

<li><img src="images/PX_6.jpg"/></li>

<li><img src="images/PX_7.jpg"/></li>

<li><img src="images/PX_8.jpg"/></li>

<li><img src="images/PX_9.jpg"/></li>

<li><img src="images/PX_10.jpg"/></li>

<li><img src="images/PX_11.jpg"/></li>

<li><img src="images/PX_12.jpg"/></li>

<li><img src="images/PX_13.jpg"/></li>

</ul>

</body>

</html>

时间: 2024-11-05 11:53:49

照片墙效果---->能成功运行。js+html+css的相关文章

如何使maven+jetty运行时不锁定js和css[转]

原因是如果NIO被支持的话,Jetty会使用内存映射文件来缓存静态文件,其中包括.js文件.在Windows下面,使用内存映射文件会导致文件被锁定.解决方案是不使用内存映射文件来做缓存.步骤如下: 1.在你使用的Jetty版本的jetty.jar中找到webdefault.xml,它在jar文件中的路径是org/mortbay/jetty/webapp/webdefault.xml.把它拷贝到项目中,比如src/main/resources/webdefault.xml. 2.找到useFile

JS配合css实现slide文字框缩放伸展效果

<!DOCTYPE html> <html> <head> <meta http-equiv="content" content="text/html charset=gb2312"> <title>JS配合css实现slide文字框缩放伸展效果</title> <style type="text/css"> *{margin:0; padding:0;} ul{

将js和css文件装入localStorage加速程序执行

原理如下: 一次批量加要加载的文件存入数组,采用Ajax方式异步载入各个文件,然后采用循环方式逐个执行下载下来的Js或者Css文件,如果已经被缓存(localStorage)的则省略下载过程. 由于JS采用的是单线程模式运行,在执行某一个js时会阻塞其它并发的js执行,所以会按顺序执行各个js.在执行完所有的脚本之后,图片会被浏览器接着 加载,所以第一次加载速度略慢,后面就会比较快了.在JQuery Mobile 1.4.5+FireFox/微信浏览器下实测效果不错,IE就被省略了,我主要是要在

IE和firefox火狐在JS、css兼容区别

1.firefox不能对innerText支持. firefox支持innerHTML但却不支持innerText,它支持textContent来实现innerText,不过默认把多余的空格也保留了.如果不用textContent,如果字符串里面不包含HTML代码也可以用innerHTML代替. 2.禁止选取网页内容: 在IE中一般用js:obj.onselectstart=function(){return false;} 而firefox用CSS:-moz-user-select:none

js插件动态加载js、css解决方案

最近因为工作需要做了一个js自动导入的插件,一开始很天真的以为动态创建个script添加到head中就ok了,试了之后才发现了问题,就是如果同时引入了多个js文件,而且后一个文件中用到了前一个文件中的变量,那就会报错,靠~~悲催了,就是说js如果动态加载(非浏览器加载因为浏览器加载时同步加载的会等待前一个js加载完成后才进行下一个js加载,这样就不会出现问题)那加载的文件是异步进行的,难怪啊!然后在网上找了些资料说用ajax同步加载,然后我试了真可以,下面就是我的代码分享出来给大家,但是注意这样

JS、CSS兼容性问题的几点总结

javascript和CSS在不同浏览器下的兼容性问题的几点总结: Javascript部分 1. document.form.item 问题问题:代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运行解决方法:改用 document.formName.elements["elementName"] 2. 集合类对象问题问题:代码中许多集合类对象取用时使用(),IE能接受,FF不能解决方法:改用 [] 作为下标

win7下,Ant 配合yuicompressor对js和css进行合并、压缩、拷贝处理

本文基于windows7系统,mac上或许更简单些.本文参阅了无墨来点睛的文章http://www.cnblogs.com/catprayer/archive/2011/08/03/2126719.html,再此说明. 花了点时间,总算是试验成功,demo地址:http://pan.baidu.com/s/1c0dGm1i ant可以去官网下载,地址是:http://ant.apache.org/ ,yuicompressor也可以去官网下一个https://github.com/yui/yui

第十一节:Bundles压缩合并js和css及原理分析

一. 简介 1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是MVC中特有的一种优化方式. (当然现在前端也有很多基于node的工作流插件,可以合并压缩混淆js或css) 2. 原理(了解即可):核心方法ApplyTransforms,通过StreamReader不断一次一次进行读取 参考文档:https://docs.microsoft.com/en-us/a

JavaScript第一讲之js操作css

原本应该是由css进行控制html中的div的宽高和背景颜色,但是在下方使用了JavaScript进行重新调用了div盒子,并且覆盖了css原本的属性内容. 需求目标:由 100 像素的粉色背景色的div盒子变成了 300像素的橘黄色效果的div盒子 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-tr