123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 |
- document.ontouchmove = function (ev) {
- ev.preventDefault();
- };
- // 获取li的宽,用来设置定位
- console.log(window.screen.width);
- let liWidth =70
- if(window.screen.width<=600) liWidth = window.screen.width / 7
- // 设置一个总分是变量
- let grade = 0
- // 设置一个定时器
- let timing =61
- $('.btnGo').click(()=>{
- $('.zhezao').hide()
- let timeId = setInterval(() => {
- timing--
- $('.time').text(timing)
- if(timing<=0) {
- $('body').css('background-color','transparent')
- $('#ul1').hide()
- $('.top').hide()
- $('.endF').text(grade)
- $('.end').show()
- clearInterval(timeId)
- }
- }, 1000);
- })
- // 点击重新开始
- $('.btn').click(()=>{
- window.location.reload();
- })
- $(function () {
- var Game = {
- colNum: 7,
- wH: liWidth,
- timeBtn: true,
- dir: 0,
- dirThis: null,
- init: function () {
- this.oUl = $('#ul1');
- this.createMap();
- },
- createMap: function () {
- this.oUl.css({ width: this.colNum * this.wH, height: this.colNum * this.wH });
- var numX = 0;
- var numY = 0;
- for (var i = 0; i < Math.pow(this.colNum, 2); i++) {
- var oLi = $('<li>');
- oLi.attr('class', 'box' + Math.floor(Math.random() * 6));
- oLi.data({ x: numX, y: numY });
- numX++;
- if (numX == this.colNum) {
- numX = 0;
- numY++;
- }
- this.oUl.append(oLi);
- }
- this.positionShow();
- this.removeShow();
- this.bindTouch();
- },
- positionShow: function () {
- this.aLi = this.oUl[0].getElementsByTagName('li');
- var arr = [];
- $(this.aLi).each(function (i, elem) {
- arr.push([elem.offsetLeft, elem.offsetTop]);
- });
- $(this.aLi).each(function (i, elem) {
- $(elem).css({ position: 'absolute', left: arr[i][0], top: arr[i][1] });
- });
- this.arr = arr;
- },
- bindTouch: function () {
- var startX = 0;
- var startY = 0;
- var This = this;
- var izIndex = 2;
- var startThis = null;
- this.oUl.delegate('li', 'touchstart mousedown', function (event) {
- var data = event.originalEvent.changedTouches ? event.originalEvent.changedTouches[0] : event;
- startX = data.clientX;
- startY = data.clientY;
- startThis = this;
- return false;
- });
- this.oUl.delegate('li', 'touchend mouseup', function (event) {
- var data = event.originalEvent.changedTouches ? event.originalEvent.changedTouches[0] : event;
- if (This.timeBtn && (Math.abs(startX - data.clientX) > 10 || Math.abs(startY - data.clientY) > 10)) {
- $(startThis).css('zIndex', izIndex++);
- if (Math.abs(startX - data.clientX) > Math.abs(startY - data.clientY)) {// 左右
- if (startX < data.clientX) { //→
- if ($(startThis).data('x') != This.colNum - 1) {
- This.dir = 1;
- var index = $(startThis).data('x') + 1 + $(startThis).data('y') * This.colNum;
- var nextLi = $(This.oUl).find('li').eq(index);
- $(startThis).insertAfter(nextLi);
- $(startThis).animate({ left: This.arr[index][0] }, 300);
- nextLi.animate({ left: This.arr[index - 1][0] }, 300);
- $(startThis).data('x', $(startThis).data('x') + 1);
- nextLi.data('x', nextLi.data('x') - 1);
- This.dirThis = nextLi;
- }
- }
- else { //←
- if ($(startThis).data('x') != 0) {
- This.dir = 2;
- var index = $(startThis).data('x') - 1 + $(startThis).data('y') * This.colNum;
- var prevLi = $(This.oUl).find('li').eq(index);
- $(startThis).insertBefore(prevLi);
- $(startThis).animate({ left: This.arr[index][0] }, 300);
- prevLi.animate({ left: This.arr[index + 1][0] }, 300);
- $(startThis).data('x', $(startThis).data('x') - 1);
- prevLi.data('x', prevLi.data('x') + 1);
- This.dirThis = prevLi;
- }
- }
- }
- else { //上下
- if (startY < data.clientY) { //↓
- if ($(startThis).data('y') != This.colNum - 1) {
- This.dir = 3;
- var index = $(startThis).data('x') + ($(startThis).data('y') + 1) * This.colNum;
- var downLi = $(This.oUl).find('li').eq(index);
- var prevThis = $(startThis).prev();
- $(startThis).insertAfter(downLi);
- downLi.insertAfter(prevThis);
- $(startThis).animate({ top: This.arr[index][1] }, 300);
- downLi.animate({ top: This.arr[index - This.colNum][1] }, 300);
- $(startThis).data('y', $(startThis).data('y') + 1);
- downLi.data('y', downLi.data('y') - 1);
- This.dirThis = downLi;
- }
- }
- else { //↑
- if ($(startThis).data('y') != 0) {
- This.dir = 4;
- var index = $(startThis).data('x') + ($(startThis).data('y') - 1) * This.colNum;
- var upLi = $(This.oUl).find('li').eq(index);
- var prevThis = $(startThis).prev();
- $(startThis).insertAfter(upLi);
- upLi.insertAfter(prevThis);
- $(startThis).animate({ top: This.arr[index][1] }, 300);
- upLi.animate({ top: This.arr[index + This.colNum][1] }, 300);
- $(startThis).data('y', $(startThis).data('y') - 1);
- upLi.data('y', upLi.data('y') + 1);
- This.dirThis = upLi;
- }
- }
- }
- This.removeShow();
- }
- return false;
- });
- },
- removeShow: function () {
- var arr = [];
- var This = this;
- function addArr(aLi) {
- var prevLi = aLi[0];
- var iNum = 0;
- for (var i = 0; i < aLi.length; i++) {
- if (aLi[i].className == prevLi.className && i % 7 != 0) {
- iNum++;
- }
- else {
- if (iNum >= 2) {
- for (var j = 0; j <= iNum; j++) {
- arr.unshift(aLi[(i - 1) - j]);
- }
- }
- iNum = 0;
- }
- prevLi = aLi[i];
- }
- if (iNum >= 2) {
- for (var j = 0; j <= iNum; j++) {
- arr.unshift(aLi[(i - 1) - j]);
- }
- }
- }
- addArr(this.aLi);
- addArr(this.xyChange(this.aLi));
- for (var i = 0; i < arr.length; i++) {
- for (var j = 0; j < this.aLi.length; j++) {
- if (arr[i] == this.aLi[j]) {
- this.aLi[j].bBtn = true;
- }
- }
- }
- var removeNum = 0;
- var removeY = [];
- var changeArr = [];
- for (var i = 0; i < this.aLi.length; i++) {
- if (this.aLi[i].bBtn) {
- removeNum++;
- removeY.push(this.aLi[i]);
- }
- }
- if (removeY.length) {
- this.timeBtn = false;
- this.dir = 0;
- console.log('消除成功');
- grade +=10
- $('.grade').text(grade)
- }
- else {
- this.toReset();
- return;
- }
- for (var i = 0; i < removeY.length; i++) {
- for (var j = 0; j < this.arrY[$(removeY[i]).data('x')].length; j++) {
- if (removeY[i] == this.arrY[$(removeY[i]).data('x')][j]) {
- this.arrY[$(removeY[i]).data('x')].iNum++;
- this.arrY[$(removeY[i]).data('x')].splice(j, 1);
- this.arrY[$(removeY[i]).data('x')].unshift(this.oneLi($(removeY[i]).data('x'), this.arrY[$(removeY[i]).data('x')].iNum));
- }
- }
- }
- for (var i = 0; i < this.colNum; i++) {
- changeArr = changeArr.concat(this.arrY[i]);
- }
- var c = this.xyChange(changeArr);
- var removeYnum = 0;
- for (var i = 0; i < removeY.length; i++) {
- $(removeY[i]).animate({ opacity: 0 }, function () {
- $(this).remove();
- removeYnum++;
- if (removeYnum == removeY.length) {
- for (var i = 0; i < c.length; i++) {
- This.oUl.append(c[i]);
- }
- var numX = 0;
- var numY = 0;
- for (var i = 0; i < This.aLi.length; i++) {
- $(This.aLi).eq(i).data({ x: numX, y: numY });
- numX++;
- if (numX == This.colNum) {
- numX = 0;
- numY++;
- }
- }
- This.movePos();
- }
- });
- }
- },
- xyChange: function (aLi) {
- var arr = [];
- var This = this;
- this.arrY = {};
- iNum = 0;
- for (var i = 0; i < this.colNum; i++) {
- this.arrY[i] = [];
- this.arrY[i].iNum = 0;
- }
- (function () {
- if (iNum == This.colNum) {
- return;
- }
- for (var i = 0; i < aLi.length; i++) {
- if (i % This.colNum == iNum) {
- arr.push(aLi[i]);
- This.arrY[iNum].push(aLi[i]);
- }
- }
- iNum++;
- arguments.callee();
- })();
- return arr;
- },
- oneLi: function (x, iNum) {
- var oLi = $('<li>');
- oLi.attr('class', 'box' + Math.floor(Math.random() * 6));
- oLi.css({ position: 'absolute', left: x * this.wH, top: -iNum * this.wH });
- this.oUl.append(oLi);
- return oLi.get(0);
- },
- movePos: function () {
- var bBtn = true;
- var This = this;
- for (var i = 0; i < this.aLi.length; i++) {
- $(this.aLi[i]).animate({ top: this.arr[i][1] }, function () {
- if (bBtn) {
- bBtn = false;
- This.timeBtn = true;
- This.removeShow();
- }
- });
- }
- },
- toReset: function () {
- console.log('消除不成功');
- switch (this.dir) {
- case 1:
- var index = $(this.dirThis).data('x') + 1 + $(this.dirThis).data('y') * this.colNum;
- var nextLi = $(this.oUl).find('li').eq(index);
- $(this.dirThis).insertAfter(nextLi);
- $(this.dirThis).animate({ left: this.arr[index][0] }, 300);
- nextLi.animate({ left: this.arr[index - 1][0] }, 300);
- $(this.dirThis).data('x', $(this.dirThis).data('x') + 1);
- nextLi.data('x', nextLi.data('x') - 1);
- break;
- case 2:
- var index = $(this.dirThis).data('x') - 1 + $(this.dirThis).data('y') * this.colNum;
- var prevLi = $(this.oUl).find('li').eq(index);
- $(this.dirThis).insertBefore(prevLi);
- $(this.dirThis).animate({ left: this.arr[index][0] }, 300);
- prevLi.animate({ left: this.arr[index + 1][0] }, 300);
- $(this.dirThis).data('x', $(this.dirThis).data('x') - 1);
- prevLi.data('x', prevLi.data('x') + 1);
- break;
- case 3:
- var index = $(this.dirThis).data('x') + ($(this.dirThis).data('y') + 1) * this.colNum;
- var downLi = $(this.oUl).find('li').eq(index);
- var prevThis = $(this.dirThis).prev();
- $(this.dirThis).insertAfter(downLi);
- downLi.insertAfter(prevThis);
- $(this.dirThis).animate({ top: this.arr[index][1] }, 300);
- downLi.animate({ top: this.arr[index - this.colNum][1] }, 300);
- $(this.dirThis).data('y', $(this.dirThis).data('y') + 1);
- downLi.data('y', downLi.data('y') - 1);
- break;
- case 4:
- var index = $(this.dirThis).data('x') + ($(this.dirThis).data('y') - 1) * this.colNum;
- var upLi = $(this.oUl).find('li').eq(index);
- var prevThis = $(this.dirThis).prev();
- $(this.dirThis).insertAfter(upLi);
- upLi.insertAfter(prevThis);
- $(this.dirThis).animate({ top: this.arr[index][1] }, 300);
- upLi.animate({ top: this.arr[index + this.colNum][1] }, 300);
- $(this.dirThis).data('y', $(this.dirThis).data('y') - 1);
- upLi.data('y', upLi.data('y') + 1);
- break;
- }
- },
- };
- Game.init();
- });
|