jQuery製作拼圖小遊戲_jquery
原始碼思路分析:
【一】如何產生圖片網格,我想到兩種方法:
(1)把這張大圖切成16張小圖,然後用img標示的src
(2)只有一張大圖,然後每個元素的背景圖用css的background-position進行切割定位,這樣就需要16個數組[0,0],[-150,0],[-300 ,0]..........(我採用這種)
【二】圖片背景定位數組與版面定位數組
在選擇了使用CSS定位切圖,就需要產生資料。
所需的css背景 定位陣列為:[0,0],[-150,0],[-300,0],[-450,0],
[0,-150],[-150,-150],[-300,-150],[-150,-150],[-300,-150],[-450,1150], [0,-300],[-150,-300],[-300,-300],[-150,-300],[-300,-300],[-450-303], [0,-450],[-150,-450],[-300,-450],[-150,-450],[-300,-450],[-450,403]
它們當中都用到了[0,-150,-300,-450]其中的值(就是我定義圖片高,寬150的倍數值),所以就利用這個值通過for(){}自動生成數組
p = [];
for(var n=0;n
p.push(-n*this.nArea); // 產生了[0,-150,-300,-4555]是上面定位值的,而產生了[0,-150,-300,-4550]就是上面定位值的,C30SS }
for(var i=0;i
k = i - this.nCol*t,
aP = [],
aL = [];
aP.push(p[k],p[t],i); //這裡我給css背景定位數組額外加了i,是為第3步判斷用的,不需要拿來設定css屬性的,我把它設定為標籤的屬性裡[bg-i]
aL.push(l[k],l[t]);
this.aBgp[i] = aP;
this.aLayout[i] = aL; }
【三】判斷是否完成
第二個元素(div)應用了css背景定位 this.aBgp[1] (值為[-150,0,1]) ,而隨機分配的佈局定位假如是this.aLayout[3] (這裡的3是隨機產生的)(值為[453,0]),那麼left:453px,top:0;
挪動這個元素,改變的是它的letf,top值,而不是本身結構的順序,取得這個元素的left,top的值(假如是挪到left:151px,top:0),然後拿來與this.aLayout[1]的值[151,0](裡面的1索引,就是本身標籤屬性的[bg-i]=1也是this.aBgp[1] 的索引)判斷,相等就說明這個元素挪動後的位置是正確。
詳細程式碼:
/*
version:2.0
*/
function GyPuzzleGame(option){
this.target = $(option.target);
this.data = option.data; //圖片資料
this.opt = option;
this.nLen = option.count; //幾張拼圖
this.aColLayout = option.aColLayout || [0,151,302,453];//佈局橫向陣列
this.aRowLayout = option.aRowLayout || [0,151];//佈局垂直陣列
this.aColBgp = option.aColBgp || [0,-150,-300,-450];//佈局橫向陣列
this.aRowBgp = option.aRowBgp || [0,-150];//佈局垂直陣列
this.nCol = this.aColLayout.length;
this.nRow = this.aRowLayout.length;
this.aLayout = []; //佈局陣列
this.aBgp = []; //css背景定位陣列
this.init();
}
GyPuzzleGame.prototype = {
getRand:function(a,r){
var arry = a.slice(0),
newArry = [];
for(var n=0;n
newArry.push(arry[nR]);
arry.splice(nR,1);
}
return newArry;
},
setPos:function(){
for(var i=0;i
l = i - this.nCol*t,
aP = [],
aL = [];
aP.push(this.aColBgp[l],this.aRowBgp[t],i);
aL.push(this.aColLayout[l],this.aRowLayout[t]);
this.aBgp[i] = aP;
this.aLayout[i] = aL;
}
},
isPass:function(item){
var _that = this,
is = 0;
item.each(function(){
var l = parseInt($(this).css('left')),
t = parseInt($(this).css('top')),
i = parseInt($(this).attr('data-bgi'));
if(l==_that.aLayout[i][0]&&t==_that.aLayout[i][1]){
is ++;
}
});
return is;
},
createDom:function(){
var layout = this.getRand(this.aLayout,this.nLen);
// console.log(layout);
for(var n=0;n
l = n - this.nCol*t;
var html = $('').
css({'left':layout[n][0] 'px',
'以上':版面配置[n][1] 'px',
'背景圖片』:'url('this.data')',
'在背景位置上使用 ':this.aBgp[n][0] 'px' ' ' this.aBgp[n][1] 'px'
});
this.target.append(html);
}
},
移動:函數(){
var $div = this.target.find('.puzzle_list'),
_that = this;
var hasElem = function(){
var t = false;
$div.each(function(){
if($(this).hasClass("on")){
t = true;
}
});
回 t;
};
// 點選
$div.click(function(){
var $this = $(this);
if(hasElem()&&!$this.hasClass("on")){
var index = $('.on').index();
if($div.eq(index).is(':animated')||$this.is(':animated')){
回復錯誤;
}
var l = $div.eq(index).position().left,
t = $div.eq(index).position().top,
myl = $this.position().left,
myt = $this.position().top;
$(this).animate({'left':l,'top':t});
地” $(this).removeClass("on");
$(this).find('span').remove();
$(this).css({'z-index':'0'});
if(_that.isPass($div) == _that.nLen){
if(typeof _that.opt.success == '函數'){
_that.opt.success({target:_that.target});
}
}
});
}
否則{
if($this.hasClass("on")){
$this.removeClass("on");
$this.find('span').remove();
}
否則{
$this.addClass("on").append("");
}
}
});
},
初始化:函數(){
// 設定CSS背景定位與元素佈局
this.setPos();
// 建立元素
this.createDom();
// 挪動圖片
this.move();
}
}
//實例呼叫
新 GyPuzzleGame({
'data':'images/03.jpg',
'目標':'#pA',
「統計」:8,
'成功':函數(opt){
opt.target.append('
}
});

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

jQuery引用方法詳解:快速上手指南jQuery是一個受歡迎的JavaScript庫,被廣泛用於網站開發中,它簡化了JavaScript編程,並為開發者提供了豐富的功能和特性。本文將詳細介紹jQuery的引用方法,並提供具體的程式碼範例,幫助讀者快速上手。引入jQuery首先,我們需要在HTML檔案中引入jQuery函式庫。可以透過CDN連結的方式引入,也可以下載

jQuery中如何使用PUT請求方式?在jQuery中,發送PUT請求的方法與發送其他類型的請求類似,但需要注意一些細節和參數設定。 PUT請求通常用於更新資源,例如更新資料庫中的資料或更新伺服器上的檔案。以下是在jQuery中使用PUT請求方式的具體程式碼範例。首先,確保引入了jQuery庫文件,然後可以透過以下方式發送PUT請求:$.ajax({u

jQuery如何移除元素的height屬性?在前端開發中,經常會遇到需要操作元素的高度屬性的需求。有時候,我們可能需要動態改變元素的高度,而有時候又需要移除元素的高度屬性。本文將介紹如何使用jQuery來移除元素的高度屬性,並提供具體的程式碼範例。在使用jQuery操作高度屬性之前,我們首先需要了解CSS中的height屬性。 height屬性用於設定元素的高度

標題:jQuery小技巧:快速修改頁面所有a標籤的文字在網頁開發中,我們經常需要對頁面中的元素進行修改和操作。使用jQuery時,有時候需要一次修改頁面中所有a標籤的文字內容,這樣可以節省時間和精力。以下將介紹如何使用jQuery快速修改頁面所有a標籤的文本,同時給出具體的程式碼範例。首先,我們需要引入jQuery庫文件,確保在頁面中引入了以下程式碼:<

標題:使用jQuery修改所有a標籤的文字內容jQuery是一款受歡迎的JavaScript庫,被廣泛用於處理DOM操作。在網頁開發中,經常會遇到需要修改頁面上連結標籤(a標籤)的文字內容的需求。本文將介紹如何使用jQuery來實現這個目標,並提供具體的程式碼範例。首先,我們需要在頁面中引入jQuery庫。在HTML檔案中加入以下程式碼:

如何判斷jQuery元素是否具有特定屬性?在使用jQuery操作DOM元素時,常會遇到需要判斷元素是否具有某個特定屬性的情況。在這種情況下,我們可以藉助jQuery提供的方法來輕鬆實現這項功能。以下將介紹兩種常用的方法來判斷一個jQuery元素是否具有特定屬性,並附上具體的程式碼範例。方法一:使用attr()方法和typeof運算子//判斷元素是否具有特定屬

jQuery是一種流行的JavaScript庫,被廣泛用於處理網頁中的DOM操作和事件處理。在jQuery中,eq()方法是用來選擇指定索引位置的元素的方法,具體使用方法和應用場景如下。在jQuery中,eq()方法選擇指定索引位置的元素。索引位置從0開始計數,即第一個元素的索引是0,第二個元素的索引是1,依此類推。 eq()方法的語法如下:$("s

一甜相機下載安裝最新版2023是一款大家人手必備的拍照神器,其中的拍照功能非常先進,隨時隨地想拍就拍非常方便,各種風格的主題背景、精美貼紙等等都可以免費下載使用,拍照方式非常簡單,一鍵美顏讓你的皮膚更加細膩,每天都有非常多熱門流行的拍照風格都可以在線嘗試,讓你分分鐘變成美美噠的男女神,還能拍攝視頻,接續記錄下生活中最美好的瞬間,接下來小編在線詳細為一甜相機夥伴們推送設定拼圖的方法。 1先進入到軟體介面,點選【範本】進入 2進入介面中點選【拼圖】進入 3最後進入到介面點選【拼圖】即可
