javascript - 拼图出现如图情况
伊谢尔伦
伊谢尔伦 2017-04-11 11:49:23
[JavaScript讨论组]

每个img并没有填充每个p.box,图片采用canvas剪切然后把url传给.box里的img属性,相关代码如下

//创建构造函数
function Jigsaw(wrap, url, size) {
        this.wrap = wrap
        this.url = url
        this.size = size
        this.boxWidth = wrapWidth / size
        this.createBox()
        this.createCanvas()
        this.init()
        this.render()
        this.bind()
    }
    
    //创建格子
    Jigsaw.prototype.createBox = function() {
        wrap.empty()
        for (var i = 0; i < this.size * this.size; i++) {
            wrap.append('

') } $('.box').width(this.boxWidth) $('.box').height(this.boxWidth) }; //创建画布 Jigsaw.prototype.createCanvas = function() { var can = document.createElement('canvas'); /*can.setAttribute("id",'canvas')*/ can.id = 'canvas' can.style.display = 'none'; can.width = this.boxWidth; can.height = this.boxWidth; document.body.appendChild(can); }; // 渲染九宫格 Jigsaw.prototype.render = function() { var index = 0; for (var i = 0; i < this.size; i++) { for (var j = 0; j < this.size; j++) { this.box.eq(index).css({ top: i * this.boxWidth + 'px', left: j * this.boxWidth + 'px' }); index++; } } var self = this this.image.onload = function() { self.w = self.image.width / self.size self.randomImage(); } this.image.src = this.url; }; // 渲染图片 Jigsaw.prototype.randomImage = function() { var self = this; var index = 0; for (var i = 0; i < this.size; i++) { for (var j = 0; j < this.size; j++) { self.ctx.drawImage(this.image, self.w * j, self.w * i, self.w, self.w, 0, 0, this.boxWidth, this.boxWidth); self.box.eq(self.imgRandomArr[index]).find('img').attr({ 'index': index, 'src': self.canvas.toDataURL('image/jpeg'), 'width': '100%', 'height': '100%' }) index++; } } }; .... -----------css--------------- * { margin: 0; padding: 0 } #wrap { border: 1px solid #CDCDCD; position: relative; margin: 20px auto; background-color: #F4F4F4; } .box { position: absolute; cursor: pointer; z-index: 0; }
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(1)
迷茫

参考 http://picturepuzzle.sinaapp.com

凑巧若干年前我也做过一个类似的游戏,使用了十分精巧的“三轮换”快速打乱算法,使用 background-image css 实现图片的“切割”

15-puzzle 游戏中,任意三个小块进行三轮换是可复原的,关于这,我有一个十分简洁的证明,这里地方太小,写不下。 ^_^

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号