├── 3dgame.js ├── README.md ├── game.js ├── game.json ├── images └── metal.jpg ├── js └── libs │ ├── symbol.js │ └── weapp-adapter.js ├── project.config.json └── three └── three.js /3dgame.js: -------------------------------------------------------------------------------- 1 | let THREE = require('./three/three') 2 | 3 | export default class game3d { 4 | constructor() { 5 | // 场景 6 | this.scene = new THREE.Scene(); 7 | // 透视摄像头 8 | this.camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); 9 | // webGL渲染器 10 | // 同时指定canvas为小游戏暴露出来的canvas 11 | this.renderer = new THREE.WebGLRenderer({ 12 | canvas: canvas, 13 | antialias: true 14 | }); 15 | this.renderer.shadowMapEnabled = true; 16 | 17 | this.light = new THREE.AmbientLight(0xffffff); 18 | this.scene.add(this.light); 19 | this.start() 20 | } 21 | start() { 22 | // 在场景中添加雾的效果;样式上使用和背景一样的颜色 23 | this.renderer.setSize(window.innerWidth, window.innerHeight); 24 | var geometry = new THREE.CubeGeometry(1, 1, 1); 25 | // 加载纹理贴图 26 | var texture = new THREE.TextureLoader().load("images/metal.jpg"); 27 | var material = new THREE.MeshBasicMaterial({ map: texture }); 28 | this.cube = new THREE.Mesh(geometry, material); 29 | this.scene.add(this.cube); 30 | this.scene.add(this.createGround()); 31 | // 设置camera的高度,若是低于当前场景的高度则屁也看不到 32 | this.camera.position.z = 10; 33 | this.cube.castShadow = true 34 | 35 | console.log(this.cube) 36 | window.requestAnimationFrame(this.loop.bind(this), canvas); 37 | } 38 | createGround(){ 39 | var geometry = new THREE.CubeGeometry(3, 3, 3); 40 | var texture = new THREE.TextureLoader().load("images/metal.jpg"); 41 | var material = new THREE.MeshBasicMaterial({ map: texture }); 42 | let cube = new THREE.Mesh(geometry, material); 43 | cube.position.y = -5 44 | cube.rotation.x = 0.5 45 | return cube 46 | } 47 | update() { 48 | this.cube.rotation.x += 0.01; 49 | this.cube.rotation.y += 0.04; 50 | this.cube.rotation.z += 0.06; 51 | } 52 | loop() { 53 | this.update() 54 | this.renderer.render(this.scene, this.camera); 55 | window.requestAnimationFrame(this.loop.bind(this), canvas); 56 | } 57 | } 58 | 59 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # threejsWithWechatGame 2 | 微信小游戏开发:使用three.js引擎 3 | 4 | ![这里写图片描述](https://github.com/myemperor/image/blob/master/20180102151141303.gif) 5 | 6 | 加入物理引擎 7 | 8 | ![这里写图片描述](https://github.com/myemperor/image/blob/master/20180110150216014.gif) 9 | -------------------------------------------------------------------------------- /game.js: -------------------------------------------------------------------------------- 1 | import './js/libs/weapp-adapter' 2 | import './js/libs/symbol' 3 | import game3d from './3dgame' 4 | // window.canvas = wx.createCanvas() 5 | // window.image = wx.createImage() 6 | new game3d() -------------------------------------------------------------------------------- /game.json: -------------------------------------------------------------------------------- 1 | { 2 | "deviceOrientation": "portrait" 3 | } 4 | -------------------------------------------------------------------------------- /images/metal.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myemperor/threejsWithWechatGame/2605fc824247b128c0923dd5af2011beab2ed2b4/images/metal.jpg -------------------------------------------------------------------------------- /js/libs/symbol.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 对于ES6中Symbol的极简兼容 3 | * 方便模拟私有变量 4 | */ 5 | 6 | let Symbol = window.Symbol 7 | let idCounter = 0 8 | 9 | if (!Symbol) { 10 | Symbol = function Symbol(key) { 11 | return `__${key}_${Math.floor(Math.random() * 1e9)}_${++idCounter}__` 12 | } 13 | 14 | Symbol.iterator = Symbol('Symbol.iterator') 15 | } 16 | 17 | window.Symbol = Symbol 18 | -------------------------------------------------------------------------------- /js/libs/weapp-adapter.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // The module cache 3 | /******/ var installedModules = {} 4 | 5 | /******/ // The require function 6 | /******/ function __webpack_require__(moduleId) { 7 | 8 | /******/ // Check if module is in cache 9 | /******/ if(installedModules[moduleId]) 10 | /******/ return installedModules[moduleId].exports 11 | 12 | /******/ // Create a new module (and put it into the cache) 13 | /******/ var module = installedModules[moduleId] = { 14 | /******/ exports: {}, 15 | /******/ id: moduleId, 16 | /******/ loaded: false 17 | /******/ } 18 | 19 | /******/ // Execute the module function 20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__) 21 | 22 | /******/ // Flag the module as loaded 23 | /******/ module.loaded = true 24 | 25 | /******/ // Return the exports of the module 26 | /******/ return module.exports 27 | /******/ } 28 | 29 | 30 | /******/ // expose the modules object (__webpack_modules__) 31 | /******/ __webpack_require__.m = modules 32 | 33 | /******/ // expose the module cache 34 | /******/ __webpack_require__.c = installedModules 35 | 36 | /******/ // __webpack_public_path__ 37 | /******/ __webpack_require__.p = "" 38 | 39 | /******/ // Load entry module and return exports 40 | /******/ return __webpack_require__(0) 41 | /******/ }) 42 | /************************************************************************/ 43 | /******/ ([ 44 | /* 0 */ 45 | /***/ (function(module, exports, __webpack_require__) { 46 | 47 | 'use strict' 48 | 49 | var _window2 = __webpack_require__(1) 50 | 51 | var _window = _interopRequireWildcard(_window2) 52 | 53 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key] } } newObj.default = obj; return newObj } } 54 | 55 | var global = GameGlobal 56 | 57 | function inject() { 58 | _window.addEventListener = _window.canvas.addEventListener = function (type, listener) { 59 | _window.document.addEventListener(type, listener) 60 | } 61 | _window.removeEventListener = _window.canvas.removeEventListener = function (type, listener) { 62 | _window.document.removeEventListener(type, listener) 63 | } 64 | 65 | var _wx$getSystemInfoSync = wx.getSystemInfoSync(), 66 | platform = _wx$getSystemInfoSync.platform 67 | 68 | // 开发者工具无法重定义 window 69 | 70 | 71 | if (typeof __devtoolssubcontext === 'undefined' && platform === 'devtools') { 72 | for (var key in _window) { 73 | var descriptor = Object.getOwnPropertyDescriptor(global, key) 74 | 75 | if (!descriptor || descriptor.configurable === true) { 76 | Object.defineProperty(window, key, { 77 | value: _window[key] 78 | }) 79 | } 80 | } 81 | 82 | for (var _key in _window.document) { 83 | var _descriptor = Object.getOwnPropertyDescriptor(global.document, _key) 84 | 85 | if (!_descriptor || _descriptor.configurable === true) { 86 | Object.defineProperty(global.document, _key, { 87 | value: _window.document[_key] 88 | }) 89 | } 90 | } 91 | window.parent = window 92 | } else { 93 | for (var _key2 in _window) { 94 | global[_key2] = _window[_key2] 95 | } 96 | global.window = _window 97 | window = global 98 | window.top = window.parent = window 99 | } 100 | } 101 | 102 | if (!GameGlobal.__isAdapterInjected) { 103 | GameGlobal.__isAdapterInjected = true 104 | inject() 105 | } 106 | 107 | /***/ }), 108 | /* 1 */ 109 | /***/ (function(module, exports, __webpack_require__) { 110 | 111 | 'use strict' 112 | 113 | Object.defineProperty(exports, "__esModule", { 114 | value: true 115 | }) 116 | exports.cancelAnimationFrame = exports.requestAnimationFrame = exports.clearInterval = exports.clearTimeout = exports.setInterval = exports.setTimeout = exports.canvas = exports.location = exports.localStorage = exports.HTMLElement = exports.FileReader = exports.Audio = exports.Image = exports.WebSocket = exports.XMLHttpRequest = exports.navigator = exports.document = undefined 117 | 118 | var _WindowProperties = __webpack_require__(2) 119 | 120 | Object.keys(_WindowProperties).forEach(function (key) { 121 | if (key === "default" || key === "__esModule") return 122 | Object.defineProperty(exports, key, { 123 | enumerable: true, 124 | get: function get() { 125 | return _WindowProperties[key] 126 | } 127 | }) 128 | }) 129 | 130 | var _constructor = __webpack_require__(3) 131 | 132 | Object.keys(_constructor).forEach(function (key) { 133 | if (key === "default" || key === "__esModule") return 134 | Object.defineProperty(exports, key, { 135 | enumerable: true, 136 | get: function get() { 137 | return _constructor[key] 138 | } 139 | }) 140 | }) 141 | 142 | var _Canvas = __webpack_require__(9) 143 | 144 | var _Canvas2 = _interopRequireDefault(_Canvas) 145 | 146 | var _document2 = __webpack_require__(10) 147 | 148 | var _document3 = _interopRequireDefault(_document2) 149 | 150 | var _navigator2 = __webpack_require__(17) 151 | 152 | var _navigator3 = _interopRequireDefault(_navigator2) 153 | 154 | var _XMLHttpRequest2 = __webpack_require__(18) 155 | 156 | var _XMLHttpRequest3 = _interopRequireDefault(_XMLHttpRequest2) 157 | 158 | var _WebSocket2 = __webpack_require__(19) 159 | 160 | var _WebSocket3 = _interopRequireDefault(_WebSocket2) 161 | 162 | var _Image2 = __webpack_require__(11) 163 | 164 | var _Image3 = _interopRequireDefault(_Image2) 165 | 166 | var _Audio2 = __webpack_require__(12) 167 | 168 | var _Audio3 = _interopRequireDefault(_Audio2) 169 | 170 | var _FileReader2 = __webpack_require__(20) 171 | 172 | var _FileReader3 = _interopRequireDefault(_FileReader2) 173 | 174 | var _HTMLElement2 = __webpack_require__(4) 175 | 176 | var _HTMLElement3 = _interopRequireDefault(_HTMLElement2) 177 | 178 | var _localStorage2 = __webpack_require__(21) 179 | 180 | var _localStorage3 = _interopRequireDefault(_localStorage2) 181 | 182 | var _location2 = __webpack_require__(22) 183 | 184 | var _location3 = _interopRequireDefault(_location2) 185 | 186 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 187 | 188 | exports.document = _document3.default 189 | exports.navigator = _navigator3.default 190 | exports.XMLHttpRequest = _XMLHttpRequest3.default 191 | exports.WebSocket = _WebSocket3.default 192 | exports.Image = _Image3.default 193 | exports.Audio = _Audio3.default 194 | exports.FileReader = _FileReader3.default 195 | exports.HTMLElement = _HTMLElement3.default 196 | exports.localStorage = _localStorage3.default 197 | exports.location = _location3.default 198 | 199 | 200 | // 暴露全局的 canvas 201 | var canvas = new _Canvas2.default() 202 | 203 | exports.canvas = canvas 204 | exports.setTimeout = setTimeout 205 | exports.setInterval = setInterval 206 | exports.clearTimeout = clearTimeout 207 | exports.clearInterval = clearInterval 208 | exports.requestAnimationFrame = requestAnimationFrame 209 | exports.cancelAnimationFrame = cancelAnimationFrame 210 | 211 | /***/ }), 212 | /* 2 */ 213 | /***/ (function(module, exports) { 214 | 215 | "use strict" 216 | 217 | Object.defineProperty(exports, "__esModule", { 218 | value: true 219 | }) 220 | 221 | var _wx$getSystemInfoSync = wx.getSystemInfoSync(), 222 | screenWidth = _wx$getSystemInfoSync.screenWidth, 223 | screenHeight = _wx$getSystemInfoSync.screenHeight, 224 | devicePixelRatio = _wx$getSystemInfoSync.devicePixelRatio 225 | 226 | var innerWidth = exports.innerWidth = screenWidth 227 | var innerHeight = exports.innerHeight = screenHeight 228 | exports.devicePixelRatio = devicePixelRatio 229 | var screen = exports.screen = { 230 | availWidth: innerWidth, 231 | availHeight: innerHeight 232 | } 233 | var performance = exports.performance = { 234 | now: function now() { 235 | return Date.now() / 1000 236 | } 237 | } 238 | var ontouchstart = exports.ontouchstart = null 239 | var ontouchmove = exports.ontouchmove = null 240 | var ontouchend = exports.ontouchend = null 241 | 242 | /***/ }), 243 | /* 3 */ 244 | /***/ (function(module, exports, __webpack_require__) { 245 | 246 | 'use strict' 247 | 248 | Object.defineProperty(exports, "__esModule", { 249 | value: true 250 | }) 251 | exports.HTMLCanvasElement = exports.HTMLImageElement = undefined 252 | 253 | var _HTMLElement3 = __webpack_require__(4) 254 | 255 | var _HTMLElement4 = _interopRequireDefault(_HTMLElement3) 256 | 257 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 258 | 259 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 260 | 261 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 262 | 263 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 264 | 265 | var HTMLImageElement = exports.HTMLImageElement = function (_HTMLElement) { 266 | _inherits(HTMLImageElement, _HTMLElement) 267 | 268 | function HTMLImageElement() { 269 | _classCallCheck(this, HTMLImageElement) 270 | 271 | return _possibleConstructorReturn(this, (HTMLImageElement.__proto__ || Object.getPrototypeOf(HTMLImageElement)).call(this, 'img')) 272 | } 273 | 274 | return HTMLImageElement 275 | }(_HTMLElement4.default) 276 | 277 | var HTMLCanvasElement = exports.HTMLCanvasElement = function (_HTMLElement2) { 278 | _inherits(HTMLCanvasElement, _HTMLElement2) 279 | 280 | function HTMLCanvasElement() { 281 | _classCallCheck(this, HTMLCanvasElement) 282 | 283 | return _possibleConstructorReturn(this, (HTMLCanvasElement.__proto__ || Object.getPrototypeOf(HTMLCanvasElement)).call(this, 'canvas')) 284 | } 285 | 286 | return HTMLCanvasElement 287 | }(_HTMLElement4.default) 288 | 289 | /***/ }), 290 | /* 4 */ 291 | /***/ (function(module, exports, __webpack_require__) { 292 | 293 | 'use strict' 294 | 295 | Object.defineProperty(exports, "__esModule", { 296 | value: true 297 | }) 298 | 299 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 300 | 301 | var _Element2 = __webpack_require__(5) 302 | 303 | var _Element3 = _interopRequireDefault(_Element2) 304 | 305 | var _util = __webpack_require__(8) 306 | 307 | var _WindowProperties = __webpack_require__(2) 308 | 309 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 310 | 311 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 312 | 313 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 314 | 315 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 316 | 317 | var HTMLElement = function (_Element) { 318 | _inherits(HTMLElement, _Element) 319 | 320 | function HTMLElement() { 321 | var tagName = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '' 322 | 323 | _classCallCheck(this, HTMLElement) 324 | 325 | var _this = _possibleConstructorReturn(this, (HTMLElement.__proto__ || Object.getPrototypeOf(HTMLElement)).call(this)) 326 | 327 | _this.className = '' 328 | _this.childern = [] 329 | _this.style = { 330 | width: _WindowProperties.innerWidth + 'px', 331 | height: _WindowProperties.innerHeight + 'px' 332 | } 333 | _this.insertBefore = _util.noop 334 | _this.innerHTML = '' 335 | 336 | _this.tagName = tagName.toUpperCase() 337 | return _this 338 | } 339 | 340 | _createClass(HTMLElement, [{ 341 | key: 'setAttribute', 342 | value: function setAttribute(name, value) { 343 | this[name] = value 344 | } 345 | }, { 346 | key: 'getAttribute', 347 | value: function getAttribute(name) { 348 | return this[name] 349 | } 350 | }, { 351 | key: 'getBoundingClientRect', 352 | value: function getBoundingClientRect() { 353 | return { 354 | top: 0, 355 | left: 0, 356 | width: _WindowProperties.innerWidth, 357 | height: _WindowProperties.innerHeight 358 | } 359 | } 360 | }, { 361 | key: 'focus', 362 | value: function focus() {} 363 | }, { 364 | key: 'clientWidth', 365 | get: function get() { 366 | var ret = parseInt(this.style.fontSize, 10) * this.innerHTML.length 367 | 368 | return Number.isNaN(ret) ? 0 : ret 369 | } 370 | }, { 371 | key: 'clientHeight', 372 | get: function get() { 373 | var ret = parseInt(this.style.fontSize, 10) 374 | 375 | return Number.isNaN(ret) ? 0 : ret 376 | } 377 | }]) 378 | 379 | return HTMLElement 380 | }(_Element3.default) 381 | 382 | exports.default = HTMLElement 383 | 384 | /***/ }), 385 | /* 5 */ 386 | /***/ (function(module, exports, __webpack_require__) { 387 | 388 | 'use strict' 389 | 390 | Object.defineProperty(exports, "__esModule", { 391 | value: true 392 | }) 393 | 394 | var _Node2 = __webpack_require__(6) 395 | 396 | var _Node3 = _interopRequireDefault(_Node2) 397 | 398 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 399 | 400 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 401 | 402 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 403 | 404 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 405 | 406 | var ELement = function (_Node) { 407 | _inherits(ELement, _Node) 408 | 409 | function ELement() { 410 | _classCallCheck(this, ELement) 411 | 412 | var _this = _possibleConstructorReturn(this, (ELement.__proto__ || Object.getPrototypeOf(ELement)).call(this)) 413 | 414 | _this.className = '' 415 | _this.children = [] 416 | return _this 417 | } 418 | 419 | return ELement 420 | }(_Node3.default) 421 | 422 | exports.default = ELement 423 | 424 | /***/ }), 425 | /* 6 */ 426 | /***/ (function(module, exports, __webpack_require__) { 427 | 428 | 'use strict' 429 | 430 | Object.defineProperty(exports, "__esModule", { 431 | value: true 432 | }) 433 | 434 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 435 | 436 | var _EventTarget2 = __webpack_require__(7) 437 | 438 | var _EventTarget3 = _interopRequireDefault(_EventTarget2) 439 | 440 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 441 | 442 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 443 | 444 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 445 | 446 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 447 | 448 | var Node = function (_EventTarget) { 449 | _inherits(Node, _EventTarget) 450 | 451 | function Node() { 452 | _classCallCheck(this, Node) 453 | 454 | var _this = _possibleConstructorReturn(this, (Node.__proto__ || Object.getPrototypeOf(Node)).call(this)) 455 | 456 | _this.childNodes = [] 457 | return _this 458 | } 459 | 460 | _createClass(Node, [{ 461 | key: 'appendChild', 462 | value: function appendChild(node) { 463 | if (node instanceof Node) { 464 | this.childNodes.push(node) 465 | } else { 466 | throw new TypeError('Failed to executed \'appendChild\' on \'Node\': parameter 1 is not of type \'Node\'.') 467 | } 468 | } 469 | }, { 470 | key: 'cloneNode', 471 | value: function cloneNode() { 472 | var copyNode = Object.create(this) 473 | 474 | Object.assign(copyNode, this) 475 | return copyNode 476 | } 477 | }, { 478 | key: 'removeChild', 479 | value: function removeChild(node) { 480 | var index = this.childNodes.findIndex(function (child) { 481 | return child === node 482 | }) 483 | 484 | if (index > -1) { 485 | return this.childNodes.splice(index, 1) 486 | } 487 | return null 488 | } 489 | }]) 490 | 491 | return Node 492 | }(_EventTarget3.default) 493 | 494 | exports.default = Node 495 | 496 | /***/ }), 497 | /* 7 */ 498 | /***/ (function(module, exports) { 499 | 500 | 'use strict' 501 | 502 | Object.defineProperty(exports, "__esModule", { 503 | value: true 504 | }) 505 | 506 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 507 | 508 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 509 | 510 | var _events = new WeakMap() 511 | 512 | var EventTarget = function () { 513 | function EventTarget() { 514 | _classCallCheck(this, EventTarget) 515 | 516 | _events.set(this, {}) 517 | } 518 | 519 | _createClass(EventTarget, [{ 520 | key: 'addEventListener', 521 | value: function addEventListener(type, listener) { 522 | var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {} 523 | 524 | var events = _events.get(this) 525 | 526 | if (!events) { 527 | events = {} 528 | _events.set(this, events) 529 | } 530 | if (!events[type]) { 531 | events[type] = [] 532 | } 533 | events[type].push(listener) 534 | 535 | if (options.capture) { 536 | console.warn('EventTarget.addEventListener: options.capture is not implemented.') 537 | } 538 | if (options.once) { 539 | console.warn('EventTarget.addEventListener: options.once is not implemented.') 540 | } 541 | if (options.passive) { 542 | console.warn('EventTarget.addEventListener: options.passive is not implemented.') 543 | } 544 | } 545 | }, { 546 | key: 'removeEventListener', 547 | value: function removeEventListener(type, listener) { 548 | var listeners = _events.get(this)[type] 549 | 550 | if (listeners && listeners.length > 0) { 551 | for (var i = listeners.length; i--; i > 0) { 552 | if (listeners[i] === listener) { 553 | listeners.splice(i, 1) 554 | break 555 | } 556 | } 557 | } 558 | } 559 | }, { 560 | key: 'dispatchEvent', 561 | value: function dispatchEvent() { 562 | var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {} 563 | 564 | var listeners = _events.get(this)[event.type] 565 | 566 | if (listeners) { 567 | for (var i = 0; i < listeners.length; i++) { 568 | listeners[i](event) 569 | } 570 | } 571 | } 572 | }]) 573 | 574 | return EventTarget 575 | }() 576 | 577 | exports.default = EventTarget 578 | 579 | /***/ }), 580 | /* 8 */ 581 | /***/ (function(module, exports) { 582 | 583 | "use strict" 584 | 585 | Object.defineProperty(exports, "__esModule", { 586 | value: true 587 | }) 588 | exports.noop = noop 589 | function noop() {} 590 | 591 | /***/ }), 592 | /* 9 */ 593 | /***/ (function(module, exports, __webpack_require__) { 594 | 595 | 'use strict' 596 | 597 | Object.defineProperty(exports, "__esModule", { 598 | value: true 599 | }) 600 | exports.default = Canvas 601 | 602 | var _constructor = __webpack_require__(3) 603 | 604 | var _HTMLElement = __webpack_require__(4) 605 | 606 | var _HTMLElement2 = _interopRequireDefault(_HTMLElement) 607 | 608 | var _document = __webpack_require__(10) 609 | 610 | var _document2 = _interopRequireDefault(_document) 611 | 612 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 613 | 614 | var hasModifiedCanvasPrototype = false 615 | var hasInit2DContextConstructor = false 616 | var hasInitWebGLContextConstructor = false 617 | 618 | function Canvas() { 619 | var canvas = wx.createCanvas() 620 | 621 | canvas.type = 'canvas' 622 | 623 | canvas.__proto__.__proto__ = new _HTMLElement2.default('canvas') 624 | 625 | var _getContext = canvas.getContext 626 | 627 | canvas.getBoundingClientRect = function () { 628 | var ret = { 629 | top: 0, 630 | left: 0, 631 | width: window.innerWidth, 632 | height: window.innerHeight 633 | } 634 | return ret 635 | } 636 | 637 | return canvas 638 | } 639 | 640 | /***/ }), 641 | /* 10 */ 642 | /***/ (function(module, exports, __webpack_require__) { 643 | 644 | 'use strict' 645 | 646 | Object.defineProperty(exports, "__esModule", { 647 | value: true 648 | }) 649 | 650 | var _window = __webpack_require__(1) 651 | 652 | var window = _interopRequireWildcard(_window) 653 | 654 | var _HTMLElement = __webpack_require__(4) 655 | 656 | var _HTMLElement2 = _interopRequireDefault(_HTMLElement) 657 | 658 | var _Image = __webpack_require__(11) 659 | 660 | var _Image2 = _interopRequireDefault(_Image) 661 | 662 | var _Audio = __webpack_require__(12) 663 | 664 | var _Audio2 = _interopRequireDefault(_Audio) 665 | 666 | var _Canvas = __webpack_require__(9) 667 | 668 | var _Canvas2 = _interopRequireDefault(_Canvas) 669 | 670 | __webpack_require__(15) 671 | 672 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 673 | 674 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key] } } newObj.default = obj; return newObj } } 675 | 676 | var events = {} 677 | 678 | var document = { 679 | readyState: 'complete', 680 | visibilityState: 'visible', 681 | documentElement: window, 682 | hidden: false, 683 | style: {}, 684 | location: window.location, 685 | ontouchstart: null, 686 | ontouchmove: null, 687 | ontouchend: null, 688 | 689 | head: new _HTMLElement2.default('head'), 690 | body: new _HTMLElement2.default('body'), 691 | 692 | createElement: function createElement(tagName) { 693 | if (tagName === 'canvas') { 694 | return new _Canvas2.default() 695 | } else if (tagName === 'audio') { 696 | return new _Audio2.default() 697 | } else if (tagName === 'img') { 698 | return new _Image2.default() 699 | } 700 | 701 | return new _HTMLElement2.default(tagName) 702 | }, 703 | createElementNS: function createElementNS(nameSpace, tagName) { 704 | return this.createElement(tagName) 705 | }, 706 | getElementById: function getElementById(id) { 707 | if (id === window.canvas.id) { 708 | return window.canvas 709 | } 710 | return null 711 | }, 712 | getElementsByTagName: function getElementsByTagName(tagName) { 713 | if (tagName === 'head') { 714 | return [document.head] 715 | } else if (tagName === 'body') { 716 | return [document.body] 717 | } else if (tagName === 'canvas') { 718 | return [window.canvas] 719 | } 720 | return [] 721 | }, 722 | querySelector: function querySelector(query) { 723 | if (query === 'head') { 724 | return document.head 725 | } else if (query === 'body') { 726 | return document.body 727 | } else if (query === 'canvas') { 728 | return window.canvas 729 | } else if (query === '#' + window.canvas.id) { 730 | return window.canvas 731 | } 732 | return null 733 | }, 734 | querySelectorAll: function querySelectorAll(query) { 735 | if (query === 'head') { 736 | return [document.head] 737 | } else if (query === 'body') { 738 | return [document.body] 739 | } else if (query === 'canvas') { 740 | return [window.canvas] 741 | } 742 | return [] 743 | }, 744 | addEventListener: function addEventListener(type, listener) { 745 | if (!events[type]) { 746 | events[type] = [] 747 | } 748 | events[type].push(listener) 749 | }, 750 | removeEventListener: function removeEventListener(type, listener) { 751 | var listeners = events[type] 752 | 753 | if (listeners && listeners.length > 0) { 754 | for (var i = listeners.length; i--; i > 0) { 755 | if (listeners[i] === listener) { 756 | listeners.splice(i, 1) 757 | break 758 | } 759 | } 760 | } 761 | }, 762 | dispatchEvent: function dispatchEvent(event) { 763 | var listeners = events[event.type] 764 | 765 | if (listeners) { 766 | for (var i = 0; i < listeners.length; i++) { 767 | listeners[i](event) 768 | } 769 | } 770 | } 771 | } 772 | 773 | exports.default = document 774 | 775 | /***/ }), 776 | /* 11 */ 777 | /***/ (function(module, exports) { 778 | 779 | "use strict" 780 | 781 | Object.defineProperty(exports, "__esModule", { 782 | value: true 783 | }) 784 | exports.default = Image 785 | function Image() { 786 | var image = wx.createImage() 787 | 788 | return image 789 | } 790 | 791 | /***/ }), 792 | /* 12 */ 793 | /***/ (function(module, exports, __webpack_require__) { 794 | 795 | 'use strict' 796 | 797 | Object.defineProperty(exports, "__esModule", { 798 | value: true 799 | }) 800 | 801 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 802 | 803 | var _HTMLAudioElement2 = __webpack_require__(13) 804 | 805 | var _HTMLAudioElement3 = _interopRequireDefault(_HTMLAudioElement2) 806 | 807 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 808 | 809 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 810 | 811 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 812 | 813 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 814 | 815 | var HAVE_NOTHING = 0 816 | var HAVE_METADATA = 1 817 | var HAVE_CURRENT_DATA = 2 818 | var HAVE_FUTURE_DATA = 3 819 | var HAVE_ENOUGH_DATA = 4 820 | 821 | var _innerAudioContext = new WeakMap() 822 | var _src = new WeakMap() 823 | var _loop = new WeakMap() 824 | var _autoplay = new WeakMap() 825 | 826 | var Audio = function (_HTMLAudioElement) { 827 | _inherits(Audio, _HTMLAudioElement) 828 | 829 | function Audio(url) { 830 | _classCallCheck(this, Audio) 831 | 832 | var _this = _possibleConstructorReturn(this, (Audio.__proto__ || Object.getPrototypeOf(Audio)).call(this)) 833 | 834 | _this.HAVE_NOTHING = HAVE_NOTHING 835 | _this.HAVE_METADATA = HAVE_METADATA 836 | _this.HAVE_CURRENT_DATA = HAVE_CURRENT_DATA 837 | _this.HAVE_FUTURE_DATA = HAVE_FUTURE_DATA 838 | _this.HAVE_ENOUGH_DATA = HAVE_ENOUGH_DATA 839 | _this.readyState = HAVE_NOTHING 840 | 841 | 842 | _src.set(_this, '') 843 | 844 | var innerAudioContext = wx.createInnerAudioContext() 845 | 846 | _innerAudioContext.set(_this, innerAudioContext) 847 | 848 | innerAudioContext.onCanplay(function () { 849 | _this.dispatchEvent({ type: 'load' }) 850 | _this.dispatchEvent({ type: 'loadend' }) 851 | _this.dispatchEvent({ type: 'canplay' }) 852 | _this.dispatchEvent({ type: 'canplaythrough' }) 853 | _this.dispatchEvent({ type: 'loadedmetadata' }) 854 | _this.readyState = HAVE_CURRENT_DATA 855 | }) 856 | innerAudioContext.onPlay(function () { 857 | _this.dispatchEvent({ type: 'play' }) 858 | }) 859 | innerAudioContext.onPause(function () { 860 | _this.dispatchEvent({ type: 'pause' }) 861 | }) 862 | innerAudioContext.onEnded(function () { 863 | _this.dispatchEvent({ type: 'ended' }) 864 | _this.readyState = HAVE_ENOUGH_DATA 865 | }) 866 | innerAudioContext.onError(function () { 867 | _this.dispatchEvent({ type: 'error' }) 868 | }) 869 | 870 | if (url) { 871 | _innerAudioContext.get(_this).src = url 872 | } 873 | return _this 874 | } 875 | 876 | _createClass(Audio, [{ 877 | key: 'load', 878 | value: function load() { 879 | console.warn('HTMLAudioElement.load() is not implemented.') 880 | } 881 | }, { 882 | key: 'play', 883 | value: function play() { 884 | _innerAudioContext.get(this).play() 885 | } 886 | }, { 887 | key: 'pause', 888 | value: function pause() { 889 | _innerAudioContext.get(this).pause() 890 | } 891 | }, { 892 | key: 'canPlayType', 893 | value: function canPlayType() { 894 | var mediaType = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '' 895 | 896 | if (typeof mediaType !== 'string') { 897 | return '' 898 | } 899 | 900 | if (mediaType.indexOf('audio/mpeg') > -1 || mediaType.indexOf('audio/mp4')) { 901 | return 'probably' 902 | } 903 | return '' 904 | } 905 | }, { 906 | key: 'cloneNode', 907 | value: function cloneNode() { 908 | var newAudio = new Audio() 909 | newAudio.loop = _innerAudioContext.get(this).loop 910 | newAudio.autoplay = _innerAudioContext.get(this).loop 911 | newAudio.src = this.src 912 | return newAudio 913 | } 914 | }, { 915 | key: 'currentTime', 916 | get: function get() { 917 | return _innerAudioContext.get(this).currentTime 918 | }, 919 | set: function set(value) { 920 | _innerAudioContext.get(this).seek(value) 921 | } 922 | }, { 923 | key: 'src', 924 | get: function get() { 925 | return _src.get(this) 926 | }, 927 | set: function set(value) { 928 | _src.set(this, value) 929 | _innerAudioContext.get(this).src = value 930 | } 931 | }, { 932 | key: 'loop', 933 | get: function get() { 934 | return _innerAudioContext.get(this).loop 935 | }, 936 | set: function set(value) { 937 | _innerAudioContext.get(this).loop = value 938 | } 939 | }, { 940 | key: 'autoplay', 941 | get: function get() { 942 | return _innerAudioContext.get(this).autoplay 943 | }, 944 | set: function set(value) { 945 | _innerAudioContext.get(this).autoplay = value 946 | } 947 | }, { 948 | key: 'paused', 949 | get: function get() { 950 | return _innerAudioContext.get(this).paused 951 | } 952 | }]) 953 | 954 | return Audio 955 | }(_HTMLAudioElement3.default) 956 | 957 | exports.default = Audio 958 | 959 | /***/ }), 960 | /* 13 */ 961 | /***/ (function(module, exports, __webpack_require__) { 962 | 963 | 'use strict' 964 | 965 | Object.defineProperty(exports, "__esModule", { 966 | value: true 967 | }) 968 | 969 | var _HTMLMediaElement2 = __webpack_require__(14) 970 | 971 | var _HTMLMediaElement3 = _interopRequireDefault(_HTMLMediaElement2) 972 | 973 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 974 | 975 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 976 | 977 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 978 | 979 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 980 | 981 | var HTMLAudioElement = function (_HTMLMediaElement) { 982 | _inherits(HTMLAudioElement, _HTMLMediaElement) 983 | 984 | function HTMLAudioElement() { 985 | _classCallCheck(this, HTMLAudioElement) 986 | 987 | return _possibleConstructorReturn(this, (HTMLAudioElement.__proto__ || Object.getPrototypeOf(HTMLAudioElement)).call(this, 'audio')) 988 | } 989 | 990 | return HTMLAudioElement 991 | }(_HTMLMediaElement3.default) 992 | 993 | exports.default = HTMLAudioElement 994 | 995 | /***/ }), 996 | /* 14 */ 997 | /***/ (function(module, exports, __webpack_require__) { 998 | 999 | 'use strict' 1000 | 1001 | Object.defineProperty(exports, "__esModule", { 1002 | value: true 1003 | }) 1004 | 1005 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 1006 | 1007 | var _HTMLElement2 = __webpack_require__(4) 1008 | 1009 | var _HTMLElement3 = _interopRequireDefault(_HTMLElement2) 1010 | 1011 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 1012 | 1013 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 1014 | 1015 | function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called") } return call && (typeof call === "object" || typeof call === "function") ? call : self } 1016 | 1017 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass) } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass } 1018 | 1019 | var HTMLMediaElement = function (_HTMLElement) { 1020 | _inherits(HTMLMediaElement, _HTMLElement) 1021 | 1022 | function HTMLMediaElement(type) { 1023 | _classCallCheck(this, HTMLMediaElement) 1024 | 1025 | return _possibleConstructorReturn(this, (HTMLMediaElement.__proto__ || Object.getPrototypeOf(HTMLMediaElement)).call(this, type)) 1026 | } 1027 | 1028 | _createClass(HTMLMediaElement, [{ 1029 | key: 'addTextTrack', 1030 | value: function addTextTrack() {} 1031 | }, { 1032 | key: 'captureStream', 1033 | value: function captureStream() {} 1034 | }, { 1035 | key: 'fastSeek', 1036 | value: function fastSeek() {} 1037 | }, { 1038 | key: 'load', 1039 | value: function load() {} 1040 | }, { 1041 | key: 'pause', 1042 | value: function pause() {} 1043 | }, { 1044 | key: 'play', 1045 | value: function play() {} 1046 | }]) 1047 | 1048 | return HTMLMediaElement 1049 | }(_HTMLElement3.default) 1050 | 1051 | exports.default = HTMLMediaElement 1052 | 1053 | /***/ }), 1054 | /* 15 */ 1055 | /***/ (function(module, exports, __webpack_require__) { 1056 | 1057 | 'use strict' 1058 | 1059 | __webpack_require__(16) 1060 | 1061 | /***/ }), 1062 | /* 16 */ 1063 | /***/ (function(module, exports, __webpack_require__) { 1064 | 1065 | 'use strict' 1066 | 1067 | var _window = __webpack_require__(1) 1068 | 1069 | var window = _interopRequireWildcard(_window) 1070 | 1071 | var _document = __webpack_require__(10) 1072 | 1073 | var _document2 = _interopRequireDefault(_document) 1074 | 1075 | var _util = __webpack_require__(8) 1076 | 1077 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj } } 1078 | 1079 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key] } } newObj.default = obj; return newObj } } 1080 | 1081 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 1082 | 1083 | var TouchEvent = function TouchEvent(type) { 1084 | _classCallCheck(this, TouchEvent) 1085 | 1086 | this.target = window.canvas 1087 | this.currentTarget = window.canvas 1088 | this.touches = [] 1089 | this.targetTouches = [] 1090 | this.changedTouches = [] 1091 | this.preventDefault = _util.noop 1092 | this.stopPropagation = _util.noop 1093 | 1094 | this.type = type 1095 | } 1096 | 1097 | function touchEventHandlerFactory(type) { 1098 | return function (event) { 1099 | var touchEvent = new TouchEvent(type) 1100 | 1101 | touchEvent.touches = event.touches 1102 | touchEvent.targetTouches = Array.prototype.slice.call(event.touches) 1103 | touchEvent.changedTouches = event.changedTouches 1104 | touchEvent.timeStamp = event.timeStamp 1105 | _document2.default.dispatchEvent(touchEvent) 1106 | } 1107 | } 1108 | 1109 | wx.onTouchStart(touchEventHandlerFactory('touchstart')) 1110 | wx.onTouchMove(touchEventHandlerFactory('touchmove')) 1111 | wx.onTouchEnd(touchEventHandlerFactory('touchend')) 1112 | wx.onTouchCancel(touchEventHandlerFactory('touchcancel')) 1113 | 1114 | /***/ }), 1115 | /* 17 */ 1116 | /***/ (function(module, exports, __webpack_require__) { 1117 | 1118 | 'use strict' 1119 | 1120 | Object.defineProperty(exports, "__esModule", { 1121 | value: true 1122 | }) 1123 | 1124 | var _util = __webpack_require__(8) 1125 | 1126 | // TODO 需要 wx.getSystemInfo 获取更详细信息 1127 | var _wx$getSystemInfoSync = wx.getSystemInfoSync(), 1128 | platform = _wx$getSystemInfoSync.platform 1129 | 1130 | var navigator = { 1131 | platform: platform, 1132 | language: 'zh-cn', 1133 | appVersion: '5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', 1134 | userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Mobile/14E8301 MicroMessenger/6.6.0 MiniGame NetType/WIFI Language/zh_CN', 1135 | onLine: true, // TODO 用 wx.getNetworkStateChange 和 wx.onNetworkStateChange 来返回真实的状态 1136 | 1137 | // TODO 用 wx.getLocation 来封装 geolocation 1138 | geolocation: { 1139 | getCurrentPosition: _util.noop, 1140 | watchPosition: _util.noop, 1141 | clearWatch: _util.noop 1142 | } 1143 | } 1144 | 1145 | exports.default = navigator 1146 | 1147 | /***/ }), 1148 | /* 18 */ 1149 | /***/ (function(module, exports) { 1150 | 1151 | 'use strict' 1152 | 1153 | Object.defineProperty(exports, "__esModule", { 1154 | value: true 1155 | }) 1156 | 1157 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 1158 | 1159 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 1160 | 1161 | var _url = new WeakMap() 1162 | var _method = new WeakMap() 1163 | var _requestHeader = new WeakMap() 1164 | var _responseHeader = new WeakMap() 1165 | var _requestTask = new WeakMap() 1166 | 1167 | function _triggerEvent(type) { 1168 | if (typeof this['on' + type] === 'function') { 1169 | for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 1170 | args[_key - 1] = arguments[_key] 1171 | } 1172 | 1173 | this['on' + type].apply(this, args) 1174 | } 1175 | } 1176 | 1177 | function _changeReadyState(readyState) { 1178 | this.readyState = readyState 1179 | _triggerEvent.call(this, 'readystatechange') 1180 | } 1181 | 1182 | var XMLHttpRequest = function () { 1183 | // TODO 没法模拟 HEADERS_RECEIVED 和 LOADING 两个状态 1184 | function XMLHttpRequest() { 1185 | _classCallCheck(this, XMLHttpRequest) 1186 | 1187 | this.onabort = null 1188 | this.onerror = null 1189 | this.onload = null 1190 | this.onloadstart = null 1191 | this.onprogress = null 1192 | this.ontimeout = null 1193 | this.onloadend = null 1194 | this.onreadystatechange = null 1195 | this.readyState = 0 1196 | this.response = null 1197 | this.responseText = null 1198 | this.responseType = '' 1199 | this.responseXML = null 1200 | this.status = 0 1201 | this.statusText = '' 1202 | this.upload = {} 1203 | this.withCredentials = false 1204 | 1205 | _requestHeader.set(this, { 1206 | 'content-type': 'application/x-www-form-urlencoded' 1207 | }) 1208 | _responseHeader.set(this, {}) 1209 | } 1210 | 1211 | /* 1212 | * TODO 这一批事件应该是在 XMLHttpRequestEventTarget.prototype 上面的 1213 | */ 1214 | 1215 | 1216 | _createClass(XMLHttpRequest, [{ 1217 | key: 'abort', 1218 | value: function abort() { 1219 | var myRequestTask = _requestTask.get(this) 1220 | 1221 | if (myRequestTask) { 1222 | myRequestTask.abort() 1223 | } 1224 | } 1225 | }, { 1226 | key: 'getAllResponseHeaders', 1227 | value: function getAllResponseHeaders() { 1228 | var responseHeader = _responseHeader.get(this) 1229 | 1230 | return Object.keys(responseHeader).map(function (header) { 1231 | return header + ': ' + responseHeader[header] 1232 | }).join('\n') 1233 | } 1234 | }, { 1235 | key: 'getResponseHeader', 1236 | value: function getResponseHeader(header) { 1237 | return _responseHeader.get(this)[header] 1238 | } 1239 | }, { 1240 | key: 'open', 1241 | value: function open(method, url /* async, user, password 这几个参数在小程序内不支持*/) { 1242 | _method.set(this, method) 1243 | _url.set(this, url) 1244 | _changeReadyState.call(this, XMLHttpRequest.OPENED) 1245 | } 1246 | }, { 1247 | key: 'overrideMimeType', 1248 | value: function overrideMimeType() {} 1249 | }, { 1250 | key: 'send', 1251 | value: function send() { 1252 | var _this = this 1253 | 1254 | var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '' 1255 | 1256 | if (this.readyState !== XMLHttpRequest.OPENED) { 1257 | throw new Error("Failed to execute 'send' on 'XMLHttpRequest': The object's state must be OPENED.") 1258 | } else { 1259 | wx.request({ 1260 | data: data, 1261 | url: _url.get(this), 1262 | method: _method.get(this), 1263 | header: _requestHeader.get(this), 1264 | responseType: this.responseType, 1265 | success: function success(_ref) { 1266 | var data = _ref.data, 1267 | statusCode = _ref.statusCode, 1268 | header = _ref.header 1269 | 1270 | if (typeof data !== 'string' && !(data instanceof ArrayBuffer)) { 1271 | try { 1272 | data = JSON.stringify(data) 1273 | } catch (e) { 1274 | data = data 1275 | } 1276 | } 1277 | 1278 | _this.status = statusCode 1279 | _responseHeader.set(_this, header) 1280 | _triggerEvent.call(_this, 'loadstart') 1281 | _changeReadyState.call(_this, XMLHttpRequest.HEADERS_RECEIVED) 1282 | _changeReadyState.call(_this, XMLHttpRequest.LOADING) 1283 | 1284 | _this.response = data 1285 | 1286 | if (data instanceof ArrayBuffer) { 1287 | _this.responseText = '' 1288 | var bytes = new Uint8Array(data) 1289 | var len = bytes.byteLength 1290 | 1291 | for (var i = 0; i < len; i++) { 1292 | _this.responseText += String.fromCharCode(bytes[i]) 1293 | } 1294 | } else { 1295 | _this.responseText = data 1296 | } 1297 | _changeReadyState.call(_this, XMLHttpRequest.DONE) 1298 | _triggerEvent.call(_this, 'load') 1299 | _triggerEvent.call(_this, 'loadend') 1300 | }, 1301 | fail: function fail(_ref2) { 1302 | var errMsg = _ref2.errMsg 1303 | 1304 | // TODO 规范错误 1305 | if (errMsg.indexOf('abort') !== -1) { 1306 | _triggerEvent.call(_this, 'abort') 1307 | } else { 1308 | _triggerEvent.call(_this, 'error', errMsg) 1309 | } 1310 | _triggerEvent.call(_this, 'loadend') 1311 | } 1312 | }) 1313 | } 1314 | } 1315 | }, { 1316 | key: 'setRequestHeader', 1317 | value: function setRequestHeader(header, value) { 1318 | var myHeader = _requestHeader.get(this) 1319 | 1320 | myHeader[header] = value 1321 | _requestHeader.set(this, myHeader) 1322 | } 1323 | }]) 1324 | 1325 | return XMLHttpRequest 1326 | }() 1327 | 1328 | XMLHttpRequest.UNSEND = 0 1329 | XMLHttpRequest.OPENED = 1 1330 | XMLHttpRequest.HEADERS_RECEIVED = 2 1331 | XMLHttpRequest.LOADING = 3 1332 | XMLHttpRequest.DONE = 4 1333 | exports.default = XMLHttpRequest 1334 | 1335 | /***/ }), 1336 | /* 19 */ 1337 | /***/ (function(module, exports) { 1338 | 1339 | 'use strict' 1340 | 1341 | Object.defineProperty(exports, "__esModule", { 1342 | value: true 1343 | }) 1344 | 1345 | var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor) } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor } }() 1346 | 1347 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 1348 | 1349 | var _socketTask = new WeakMap() 1350 | 1351 | var WebSocket = function () { 1352 | // TODO 更新 binaryType 1353 | // The connection is in the process of closing. 1354 | // The connection is not yet open. 1355 | function WebSocket(url) { 1356 | var _this = this 1357 | 1358 | var protocols = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [] 1359 | 1360 | _classCallCheck(this, WebSocket) 1361 | 1362 | this.binaryType = '' 1363 | this.bufferedAmount = 0 1364 | this.extensions = '' 1365 | this.onclose = null 1366 | this.onerror = null 1367 | this.onmessage = null 1368 | this.onopen = null 1369 | this.protocol = '' 1370 | this.readyState = 3 1371 | 1372 | if (typeof url !== 'string' || !/(^ws:\/\/)|(^wss:\/\/)/.test(url)) { 1373 | throw new TypeError('Failed to construct \'WebSocket\': The URL \'' + url + '\' is invalid') 1374 | } 1375 | 1376 | this.url = url 1377 | this.readyState = WebSocket.CONNECTING 1378 | 1379 | var socketTask = wx.connectSocket({ 1380 | url: url, 1381 | protocols: Array.isArray(protocols) ? protocols : [protocols] 1382 | }) 1383 | 1384 | _socketTask.set(this, socketTask) 1385 | 1386 | socketTask.onClose(function (res) { 1387 | _this.readyState = WebSocket.CLOSED 1388 | if (typeof _this.onclose === 'function') { 1389 | _this.onclose(res) 1390 | } 1391 | }) 1392 | 1393 | socketTask.onMessage(function (res) { 1394 | if (typeof _this.onmessage === 'function') { 1395 | _this.onmessage(res) 1396 | } 1397 | }) 1398 | 1399 | socketTask.onOpen(function () { 1400 | _this.readyState = WebSocket.OPEN 1401 | if (typeof _this.onopen === 'function') { 1402 | _this.onopen() 1403 | } 1404 | }) 1405 | 1406 | socketTask.onError(function (res) { 1407 | if (typeof _this.onerror === 'function') { 1408 | _this.onerror(new Error(res.errMsg)) 1409 | } 1410 | }) 1411 | 1412 | return this 1413 | } // TODO 小程序内目前获取不到,实际上需要根据服务器选择的 sub-protocol 返回 1414 | // TODO 更新 bufferedAmount 1415 | // The connection is closed or couldn't be opened. 1416 | 1417 | // The connection is open and ready to communicate. 1418 | 1419 | 1420 | _createClass(WebSocket, [{ 1421 | key: 'close', 1422 | value: function close(code, reason) { 1423 | this.readyState = WebSocket.CLOSING 1424 | var socketTask = _socketTask.get(this) 1425 | 1426 | socketTask.close({ 1427 | code: code, 1428 | reason: reason 1429 | }) 1430 | } 1431 | }, { 1432 | key: 'send', 1433 | value: function send(data) { 1434 | if (typeof data !== 'string' && !(data instanceof ArrayBuffer)) { 1435 | throw new TypeError('Failed to send message: The data ' + data + ' is invalid') 1436 | } 1437 | 1438 | var socketTask = _socketTask.get(this) 1439 | 1440 | socketTask.send({ 1441 | data: data 1442 | }) 1443 | } 1444 | }]) 1445 | 1446 | return WebSocket 1447 | }() 1448 | 1449 | WebSocket.CONNECTING = 0 1450 | WebSocket.OPEN = 1 1451 | WebSocket.CLOSING = 2 1452 | WebSocket.CLOSED = 3 1453 | exports.default = WebSocket 1454 | 1455 | /***/ }), 1456 | /* 20 */ 1457 | /***/ (function(module, exports) { 1458 | 1459 | "use strict" 1460 | 1461 | Object.defineProperty(exports, "__esModule", { 1462 | value: true 1463 | }) 1464 | 1465 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function") } } 1466 | 1467 | /* 1468 | * TODO 使用 wx.readFile 来封装 FileReader 1469 | */ 1470 | var FileReader = function FileReader() { 1471 | _classCallCheck(this, FileReader) 1472 | } 1473 | 1474 | exports.default = FileReader 1475 | 1476 | /***/ }), 1477 | /* 21 */ 1478 | /***/ (function(module, exports) { 1479 | 1480 | "use strict" 1481 | 1482 | Object.defineProperty(exports, "__esModule", { 1483 | value: true 1484 | }) 1485 | var localStorage = { 1486 | get length() { 1487 | var _wx$getStorageInfoSyn = wx.getStorageInfoSync(), 1488 | keys = _wx$getStorageInfoSyn.keys 1489 | 1490 | return keys.length 1491 | }, 1492 | 1493 | key: function key(n) { 1494 | var _wx$getStorageInfoSyn2 = wx.getStorageInfoSync(), 1495 | keys = _wx$getStorageInfoSyn2.keys 1496 | 1497 | return keys[n] 1498 | }, 1499 | getItem: function getItem(key) { 1500 | return wx.getStorageSync(key) 1501 | }, 1502 | setItem: function setItem(key, value) { 1503 | return wx.setStorageSync(key, value) 1504 | }, 1505 | removeItem: function removeItem(key) { 1506 | wx.removeStorageSync(key) 1507 | }, 1508 | clear: function clear() { 1509 | wx.clearStorageSync() 1510 | } 1511 | } 1512 | 1513 | exports.default = localStorage 1514 | 1515 | /***/ }), 1516 | /* 22 */ 1517 | /***/ (function(module, exports) { 1518 | 1519 | 'use strict' 1520 | 1521 | Object.defineProperty(exports, "__esModule", { 1522 | value: true 1523 | }) 1524 | var location = { 1525 | href: 'game.js', 1526 | reload: function reload() {} 1527 | } 1528 | 1529 | exports.default = location 1530 | 1531 | /***/ }) 1532 | /******/ ]) -------------------------------------------------------------------------------- /project.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "项目配置文件。", 3 | "setting": { 4 | "urlCheck": false, 5 | "es6": true, 6 | "postcss": true, 7 | "minified": true, 8 | "newFeature": true 9 | }, 10 | "compileType": "game", 11 | "libVersion": "game", 12 | "appid": "touristappid", 13 | "projectname": "xx", 14 | "isGameTourist": true, 15 | "condition": { 16 | "search": { 17 | "current": -1, 18 | "list": [] 19 | }, 20 | "conversation": { 21 | "current": -1, 22 | "list": [] 23 | }, 24 | "game": { 25 | "currentL": -1, 26 | "list": [] 27 | }, 28 | "miniprogram": { 29 | "current": -1, 30 | "list": [] 31 | } 32 | } 33 | } --------------------------------------------------------------------------------