一周项目总结

一周项目总结(20181027):

1.原生选择框(仅限于移动端使用)

请选择游戏角色

样式上面把select绝对定位在rel上面,然后透明度为0即可

$('#role').on('change', function () {
  var selectedIndex = $(this)[0].selectedIndex;
  $('.rel').text(selectedRole.name)
})

问题:由于默认是角色1,所以第一次选择角色1不触发change

解决方法:加一个选项然后把它隐藏掉

这样做在部分浏览器是可以隐藏的,在safri上面不能隐藏的,不过也不影响使用了

2.canvas绘图

2.1准备工作

createjs地址:http://www.createjs.cc/

EaselJS模块:http://www.createjs.cc/easeljs

这次我使用的是easeljs来绘图,它有丰富的api,能够很好的解决在canvas中写大段文字不对称的问题

首先你需要把图片地址都写在data.js中:

var pics = [
  __uri("../img/pics/0.jpg"),
  __uri("../img/pics/1.jpg"),
  __uri("../img/pics/2.jpg"),
  __uri("../img/pics/3.jpg"),
]

然后如果页面上有img标签已经载入了这张图片,那么就不需要做图片加载了,否则需要用到这个:

var flag = 0
for (var i = 0; i < imgs.length; i++) {
  var $img = new Image()
  $img.src = imgs[i]
  $img.onload = function () {
    flag++
    if (flag == imgs.length) {
      cb();
    }
  }
}

把所有图片加载完成之后再开始绘图工作

2.2正式开始绘图

别忘了导入easyljs

2.2.1获取canvas对象

 var stage = new createjs.Stage("canvas")

2.2.2把要画的内容实例化为createjs对象

 var bg = new createjs.Bitmap(pics[0]),
       txts = new createjs.Text("", "24px Microsoft Yahei", "#fff")

2.2.3设置图片或者文字的属性

2.2.3.1图片

 var bounds1 = bg.getBounds()
      bg.scaleX = 504 / bounds1.width
      bg.scaleY = 630 / bounds1.height
      bg.x = 0;
      bg.y = 0
      stage.addChild(bg)


getBounds():获取图片在页面上的实际大小(px)

504:对应设计稿上的图片宽度

630:设计稿图片高度

x,y的值都是相对于父元素的值

stage.addChild(bg):最后!!!!把图片添加到舞台中去

2.2.3.2文字

首行缩进暂时没有其他办法,只能用空格代替:

txts.text = '       ' + $('.before-loading .txt').text().trim()
txts.lineWidth = 470;
txts.lineHeight = 42;
txts.x = 20;
txts.y = 318;
stage.addChild(txts)

2.3更新canvas
stage.update();

2.4生成图片

 $('#rel_img').attr('src', stage.toDataURL())

2.5额外的补充说明

!!!canvas中用的图片必须上传到本项目目录下,否则会造成跨域而无法生成图片

!!!本项目用到了base64二维码,由于生成二维码需要一段时间,所以先显示canvas,延迟之后再生成图片地址隐藏canvas

3.移动端常用事件变体

3.1长按:

function bindLongTouch(cls, cb) {
        var longClick = false;
        $(cls).on({
          touchstart: function (e) {
            longClick = false;//设置初始为false
            timeOutEvent = setTimeout(function () {
              //此处为长按事件-----在此显示遮罩层及删除按钮
              longClick = true;//假如长按,则设置为1
            }, 500);
          },
          touchmove: function (e) {
            clearTimeout(timeOutEvent);
            timeOutEvent = 0;
          },
          touchend: function (e) {
            clearTimeout(timeOutEvent);
            if (timeOutEvent != 0 && longClick == true) {
              //此处为点击事件----在此处添加跳转详情页
              cb()
            }
          }
        });
      }


3.2双指缩放

核心:e.touches对象

e.touches.length:同时放在屏幕上的手指个数

e.touches[i]表示第i个手指对象,里面有位置坐标

在iOS上有一组双指事件gesturestart、gesturechange、gestureend ,安卓上面没有,所以先判断是否是ios,不是则自定义这几个方法

这些基本的核心内容知道了,接下来就应该知道怎么做了,利用勾股定理求出两个点的坐标差,然后相除就得到缩放比例

如:x2y2/x1y1

一周项目总结_第1张图片

 

 

 

 

你可能感兴趣的:(js)