北京的冬越來越冷。但是擋不住戰士們勇往直前激情(一大清早地鐵站依舊還是辣麽多人排隊~激情四射的)。 今天分享兩個電子相冊。 動畫版: 因為圖片地址是本地地址所以賦效果圖給各位大神指點: 各位看客老爺肯定說說好的兩個相冊呢? O(∩_∩)O哈哈~別急。。請看下一篇博文~ 忘了這個了commom: ...
北京的冬越來越冷。但是擋不住戰士們勇往直前激情(一大清早地鐵站依舊還是辣麽多人排隊~激情四射的)。
今天分享兩個電子相冊。
動畫版:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style> body,p{ padding:0; margin:0; } html,body{ width:100%; height:100%; overflow: hidden; } .Box{ width:100%; height:100%; background: url(img/bg.png) no-repeat; background-size: 100%; position: relative; } .Box>div{ width: 100px; height:100px; overflow: hidden; border-radius: 50%; position: absolute; left: 0px; right: 0; z-index: 10; box-shadow: 0 0 20px 2px #999; } .img{ width:100%; height:100%; opacity: 1; } .start{ width:100px; height:50px; text-align: center; margin-top: 120px; cursor: pointer; position: absolute; left: 0; right: 0; z-index: 1; font: 40px/50px "微軟雅黑"; } .btn{ width:100%; height:50px; background-color: rgba(106,144,203,0.1); display: flex; justify-content: center; padding:10px; box-sizing: border-box; position: absolute; top:0px; } .btn p{ height:30px; width:130px; text-align: center; margin-left: 5px; margin-right: 5px; line-height: 30px; cursor: pointer; background-color: rgba(255,255,255,.4); box-shadow: 0 0 10px 1px ; border-radius: 25px; /*position: absolute; left:0;*/ } </style> <script id="commomjs" src="commom.js"></script> <script type="text/javascript"> window.onload = function(){ //獲取元素 var divs = document.querySelectorAll('.Box>div'); var start = document.querySelector('.start'); var btn = document.querySelector('.btn'); var timer = null; var btn_box = document.querySelectorAll('.btn>p'); // console.log(divs[index]) //初始化圖片div的初始位置 reset(); function reset(){ for(var i=0;i<divs.length;i++){ divs[i].state = false; divs[i].style.top = (window.innerHeight-divs[i].offsetHeight)/2+'px'; divs[i].style.left = (window.innerWidth-divs[i].offsetWidth)/2+'px'; } //初始化start的初始位置 start.style.top = (window.innerHeight-start.offsetHeight)/2+'px'; start.style.left = (window.innerWidth-start.offsetWidth)/2+'px'; } //處理document的預設事件 document.onmousedown = function(ev){ var ev = ev||event ev.preventDefault(); return false; } //點擊開始時圖片移動到右下角 start.onclick = function(){ start.style.display = 'none'; for(var i=0;i<divs.length;i++){ divs[i].state = false; !function(i){ setTimeout(function(){ MTween({ obj:divs[i], attrs:{ top:window.innerHeight-10-divs[i].offsetHeight+'px', left:(window.innerWidth-start.offsetWidth)/2+'px' }, duration:400, callBack:function(){ for(var i=0;i<divs.length;i++){ MTween({ obj:divs[i], attrs:{ left:300+i*80+'px', }, duration:2000, callBack:function(){ for(var i=0;i<divs.length;i++){ divs[i].state = true; } } }) } } }) },50*i); }(i) } } //拖拽事件 for(var i=0;i<divs.length;i++){ move(divs[i]) } function move(obj){ obj.onmousedown = function(ev){ if(!obj.state) return; clearInterval(timer); var ev = ev||event; var x1 = ev.clientX; var y1 = ev.clientY; var l = obj.offsetLeft; var t = obj.offsetTop; this.style.zIndex = 5; document.onmousemove = function(ev){ var ev = ev||event; var x2 = ev.clientX; var y2 = ev.clientY; var x = x2-x1+l; var y = y2-y1+t; for(var i=0;i<divs.length;i++){ if(x<=80)x=0; if(x>=window.innerWidth-divs[i].offsetWidth-50)x=window.innerWidth-divs[i].offsetWidth; if(y<=80)y=50; if(y>=window.innerHeight-50)y=window.innerHeight-divs[i].offsetHeight; } obj.style.left = x+'px'; obj.style.top = y+'px'; } document.onmouseup = function(ev){ if(!obj.state) return; var m = ev.target; console.log(m.parentNode.className) if(m.parentNode.className=='pic_box'){ if(m.parentNode.style.top<window.innerHeight-200+'px'){ m.parentNode.style.borderRadius= '0' m.parentNode.style.zIndex = '0'; m.parentNode.style.width = '200px'; m.parentNode.style.height = '200px' } } document.onmousemove = null; } return false; document.preventDefault(); } } //處理相冊的排序 var Reset = document.querySelectorAll('.btn>p')[0]; var random = document.querySelectorAll('.btn>p')[1]; var dir = document.querySelectorAll('.btn>p')[2]; var seriation = document.querySelectorAll('.btn>p')[3]; var freedom = document.querySelectorAll('.btn>p')[4]; //將所有div放入數組中 var arr = []; for(var i=0;i<divs.length;i++){ arr.push(divs[i]); } //處理圖片放大後在縮放回圓形 function zoom(){ for(var i=0;i<divs.length;i++){ divs[i].style.borderRadius= '50%' divs[i].style.zIndex = '10'; divs[i].style.width = '100px'; divs[i].style.height = '100px' } } //集合按鈕動畫處理 Reset.onclick = function(){ clearInterval(timer); start.style.display = 'block'; for(var i=0;i<divs.length;i++){ divs[i].state = false zoom() MTween({ obj:divs[i], attrs:{ top:(window.innerHeight-divs[i].offsetHeight)/2+'px', left:(window.innerWidth-divs[i].offsetWidth)/2+'px' }, duration:500, }) } }; //隨機擺放動畫處理 random.onclick = function(){ for(var i=0;i<divs.length;i++){ if(!divs[i].state) return; } start.style.display = 'none'; zoom(); clearInterval(timer); for(var i=0;i<divs.length;i++){ MTween({ obj:divs[i], attrs:{ top:50+Math.round(Math.random()*(window.innerHeight-150))+'px', left:Math.round(Math.random()*(window.innerWidth-100))+'px', }, duration:500, }) } } //處理自由活動動畫 freedom.onclick = function(){ for(var i=0;i<divs.length;i++){ if(!divs[i].state) return; } start.style.display = 'none'; zoom(); clearInterval(timer); for(var i=0;i<divs.length;i++){ clearInterval(timer); timer = setInterval(function(){ for(var i=0;i<divs.length;i++){ MTween({ obj:divs[i], attrs:{ top:50+Math.round(Math.random()*(window.innerHeight-150))+'px', left:Math.round(Math.random()*(window.innerWidth-100))+'px', }, duration:2000, }) } },10) } } //處理向左向右看齊 dir.onclick = function(){ for(var i=0;i<divs.length;i++){ if(!divs[i].state) return; } start.style.display = 'none'; zoom(); arr.reverse(); clearInterval(timer); for(var i=0;i<divs.length;i++ ){ MTween({ obj:arr[i], attrs:{ top:(window.innerHeight-divs[i].offsetHeight)/2+'px', left:200+i*110+'px' }, duration:1000, }) } } //處理循序排列 seriation.onclick = function(){ for(var i=0;i<divs.length;i++){ if(!divs[i].state) return; } start.style.display = 'none'; zoom(); clearInterval(timer); for(var i=0;i<divs.length;i++){ MTween({ obj:arr[i], attrs:{ top:((window.innerHeight-divs[i].offsetHeight)/2-divs[i].offsetHeight)+(i*100)-(parseInt(i/3)*300)+'px', left:((window.innerWidth-divs[i].offsetWidth)/2-divs[i].offsetWidth)+(parseInt(i/3)*100)+'px' }, duration:1000, }) } } } </script> </head> <body> <section class="Box"> <header class="btn"> <p class="reset">集合</p> <p class="random">隨機擺放</p> <p class="dir">向左向右看齊</p> <p class="seriation">站隊</p> <p class="freedom">自由活動</p> </header> <p class="start">start</p> <div class="pic_box"> <img class="img" src="img/1.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/2.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/3.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/4.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/5.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/6.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/7.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/8.jpg" alt="" /> </div> <div class="pic_box"> <img class="img" src="img/9.jpg" alt="" /> </div> </section> </body> </html>
因為圖片地址是本地地址所以賦效果圖給各位大神指點:
各位看客老爺肯定說說好的兩個相冊呢?
O(∩_∩)O哈哈~別急。。請看下一篇博文~
忘了這個了commom:
var commomjs = document.querySelector('#commomjs'); require(commomjs); function require(obj){ var comSrc = obj.src; //找最後一個 / 位置 var index = comSrc.lastIndexOf('/'); var _dir = comSrc.slice(0,index+1)+'tween.js'; var script = document.createElement('script'); script.src = _dir; obj.parentNode.insertBefore(script,obj); } /* * 獲取css屬性方法 * */ function getStyle(){ var obj = arguments[0]; var arr = arguments.length>2?{}:''; if(typeof arr=='string'){ arr = !obj.currentStyle?getComputedStyle(obj)[arguments[1]]:obj.currentStyle[arguments[1]]; }else{ for(var i=1;i<arguments.length;i++){ //arr.height = ''; arr[arguments[i]] = !obj.currentStyle?getComputedStyle(obj)[arguments[i]]:obj.currentStyle[arguments[i]]; } } return arr; } /* * 獲取元素集合 * */ function $(str){ var dom;//儲存找到的元素 if(str.charAt(0)=='.'){ dom = document.getElementsByClassName(str.slice(1)); }else if(str.charAt(0)=='#'){ dom = document.getElementById(str.slice(1)); }else{ dom = document.getElementsByTagName(str); } return dom;//把獲取到的元素給到需要用的人 } //封裝move function move(obj,attr,speed,end,callBack){ clearInterval(obj.timer); obj.timer = setInterval(function(){ var attrVal = parseFloat(getStyle(obj,attr)); var s = attrVal+speed;//下一幀的位置 if(speed<0){ if(s<=end){ s=end; clearInterval(obj.timer); } } if(speed>0){ if(s>=end){ s=end; clearInterval(obj.timer); } } obj.style[attr] = s +'px'; // if(s==end){ // if(callBack){ // callBack(); // } // callBack&&callBack(); // } if(s==end&&callBack){ //如果到達了目標點,並且有回調函數的情況就執行; callBack(); } },30); } //MTween 時間版的運動函數 /*function MTween(obj,attr,begin,end,duration,unit,way,callBack){ if(obj.isAnim) return; //obj開始運動了 自定義屬性 obj.isAnim = true; if(!way){ //如果用戶沒有選擇運動方式就預設勻速 way = 'linear'; } if(!unit){ //如果用戶沒有傳入單位,預設為空 unit = ''; } // console.log(getStyle(obj,'transform')); var start = parseFloat(begin)||parseFloat(getStyle(obj,attr))||0;//起始位置 如果begin未傳值,那就就嘗試獲取傳入的屬性值,如果屬性值獲取失敗,就預設為0 // console.log(start); // var end = 1000;//目標點 // var duration = 1000;//動畫執行的總時間 單位是毫秒 var startTime = Date.now(); var s = end - start; //總路程 // var v = s/duration; //計算出來的速度 //每次20ms走一幀 clearInterval(timer); var timer = 0; timer = setInterval(function(){ // console.log(attr); var endTime = Date.now(); //計算出當前時間 var t = endTime-startTime; if(t>=duration){ t = duration; clearInterval(timer);//到達目標點要清除定時器 } // console.log(t,start,s,duration); // console.log(Tween[way](t,start,s,duration)); obj.style[attr] = Tween[way](t,start,s,duration)+unit; //透明度的相容處理 if(attr=='opacity'){ obj.style.filter = 'Alpha(opacity='+Tween[way](t,start,s,duration)*100+')'; } //如果是transform的情況 //transform.scale ==> ['transform','scale'] var attr1 = attr.split('.'); // console.log(attr1); if(attr1.length>1&&attr1[0]=='transform'){ //js設置transform的方式: // obj.style.tranform = 'scale(n)'; // console.log(1); if(attr1[1]=='scale'){ obj.style[attr1[0]] = attr1[1]+'('+Tween[way](t,start,s,duration)+')'; }else if(attr1[1]=='rotateZ'){ obj.style[attr1[0]] = attr1[1]+'('+Tween[way](t,start,s,duration)+'deg)'; } } if(t==duration){ obj.isAnim = false; //等到上一個動畫完成 然後再調用 if(callBack){ callBack(); } } },20); }*/ //MTween 時間版的運動函數 function MTween(opt){ //end unit begin var option = { obj:'', begins:{}, attrs:{}, duration:0, way:'linear', callBack:function(){} }; //用傳入的參數覆蓋預設值 for(var key in option){ if(opt[key]){ option[key] = opt[key]; } } // console.log(option); //為了不再修改下麵更多的代碼,在這裡做一次變數的適配 var obj = option.obj; var attrs = option.attrs; var duration = option.duration; var way = option.way; var callBack = option.callBack; var begins = option.begins; // console.log(Tween[way],way,option.way); // // return; if(obj.isAnim) return; //obj開始運動了 自定義屬性 obj.isAnim = true; var starts = {}; //獲取傳入屬性的開始位置 for(var key in attrs){ // console.log(key); starts[key] = parseFloat(begins[key])||parseFloat(getStyle(obj,key))||0; } // console.log(starts); //對應的單位 var uintes = {}; for(var key in attrs){ // console.log(attrs[key]); //不是字元串的直接跳出 if(typeof attrs[key]!='string') continue; var num = parseFloat(attrs[key]); var arr = attrs[key].split(num); // console.log(arr); uintes[key] = arr[1]; } // console.log(uintes); // var start = parseFloat(begin)||parseFloat(getStyle(obj,attr))||0;//起始位置 如果begin未傳值,那就就嘗試獲取傳入的屬性值,如果屬性值獲取失敗,就預設為0 // console.log(start); // var end = 1000;//目標點 // var duration = 1000;//動畫執行的總時間 單位是毫秒 var startTime = Date.now(); //所有的屬性的總路程 var allS = {}; for(var key in attrs){ if(key=='transform.scale'){ console.log(attrs[key]); } allS[key] = parseFloat(attrs[key])-starts[key]||0; } // console.log(allS); // var s = end - start; //總路程 // var v = s/duration; //計算出來的速度 //每次20ms走一幀 // console.log(timer); clearInterval(timer); var timer = 0; timer = setInterval(function(){ // console.log(attr); var endTime = Date.now(); //計算出當前時間 var t = endTime-startTime; if(t>=duration){ t = duration; clearInterval(timer);//到達目標點要清除定時器 } // console.log(t,start,s,duration); // console.log(Tween[way](t,start,s,duration)); //運動的屬性 for(var key in attrs){ obj.style[key] = Tween[way](t,starts[key],allS[key],duration)+(uintes[key]||''); //透明度的相容處理 if(key=='opacity'){ obj.style.filter = 'Alpha(opacity='+Tween[way](t,starts[key],allS[key],duration)*100+')'; } //處理scrollTop if(key=='scrollTop'||key=='scrollLeft'){ obj[key] = Tween[way](t,starts[key],allS[key],duration)+(uintes[key]||''); } //transform 的處理 var attr1 = key.split('.'); if(attr1.length>1&&attr1[0]=='transform'){ if(attr1[1]=='scale'){ obj.style[attr1[0]] = attr1[1]+'('+Tween[way](t,starts[key],allS[key],duration)+')'; }else if(attr1[1]=='rotateZ'){ obj.style[attr1[0]] = attr1[1]+'('+Tween[way](t,starts[key],allS[key],duration)+'deg)'; } } } if(t==duration){ obj.isAnim = false; //等到上一個動畫完成 然後再調用 if(callBack){ callBack(obj); } } },20); obj.clearInterval = function(){ clearInterval(timer); obj.isAnim = false; }; } //抖動函數: /* * obj: 抖動的對象 * attr: 抖動的屬性 * * */ function shake(obj,attr,s,f,callBack){ // var s = 40; //最大偏移量 // var f = 10; //衰退值 // console.log(obj.isShake); if(obj.isShake) return; obj.isShake = true; var oldSite = parseFloat(getStyle(obj,attr));//抖動之前的位置 // var arr = [-10,10,-5,5,0]; var arr = []; // for(var i=0;i<?;i++){ // arr[i] = -s; // arr[i+1] = s; // } for迴圈無法實現 改用while迴圈 while(s>0){ //創造抖動的偏移量集合 arr[arr.length] = -s; arr[arr.length] = s; s -= f; } arr[arr.length] = 0;//加上一個0 // console.log(arr); var num = 0; clearInterval(timer); var timer = 0; timer = setInterval(function(){ obj.style[attr] = oldSite+arr[num]+'px'; if(arr[num]==0){ clearInterval(timer); obj.isShake = false; callBack&&callBack(); } num++; },30); } //補0函數: function format(num){ return num<10?'0'+num:''+num; } //修改search某一個值的函數 如果不傳任何參數,將返回一個包含search屬性值的對象 function editSearch(name,value,bool){ var search = window.location.search;// typeof => string console.log(search); //如果要修改某個值 先把字元串轉成對象 //?user=yinwei&pwd=123456 var info = search.substring(1); //把對應的信息分組 var info = info.split('&'); var searchObj = {}; //info已經是一個數組,需要遍歷拆分 for(var i=0;i<info.length;i++){ var arr = info[i].split('='); searchObj[arr[0]] = arr[1]; } if(arguments.length==0){ //如果沒有傳入任何參數,那麼程式就假定用戶可能是需要search的對象 return searchObj; } searchObj[name] = value;//改值 //把改好的值在拼接回字元串 var arr = []; var n = 0; for(key in searchObj){ arr[n] = key + '=' +searchObj[key]; n++; } console.log(arr); search = ''; for(var i=0;i<arr.length;i++){ search += arr[i]+'&'; } // console.log(search.slice(0,-1)); if(bool){ //有時候並不希望直接刷新頁面 return search.slice(0,-1); } window.location.search = search.slice(0,-1); }