dom
Updated time: 12/09/2017
包含如下可以更新 dom 树的 dom API。
这部分API是通过把 virtual-dom 的消息发送到 native 渲染器来做到的。
开发者在日常开发中,唯一可在 .vue 文件中使用的是 scrollToElement。
你也可以调用 $scrollTo 方法来使用它
这个页面提及的其他的 API,只在 callNative 进程中的 native 渲染器用。
(关于 callNative 进程的进一步介绍,可以在 How it works中的 JS Framework 部分看到 )
API
让页面滚动到那个对应的节点,这个API只能在 <scroller> 和 <list> 组件中用。
这个API也能通过调用VM的方法 $scrollTo 来使用(已弃用)
要在你的 .vue 文件中使用这个 API,可以使用 weex.requireModule('dom').scrollToElement。
参数
node {Node}:你要滚动到的那个节点 
options {Object}:如下选项 
offset {number}:一个到其可见位置的偏移距离,默认是 0 
animated {boolean} 0.10+:是否需要附带滚动动画,默认是true 
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
   | <template>   <div class="wrapper">     <scroller class="scroller">       <div class="row" v-for="(name, index) in rows" :ref="'item'+index">         <text class="text" :ref="'text'+index">{{name}}</text>       </div>     </scroller>     <div class="group">       <text @click="goto10" class="button">Go to 10</text>       <text @click="goto20" class="button">Go to 20</text>     </div>   </div> </template> <script>   const dom = weex.requireModule('dom')   export default {     data () {       return {         rows: []       }     },     created () {       for (let i = 0; i < 30; i++) {         this.rows.push('row ' + i)       }     },     methods: {       goto10 (count) {         const el = this.$refs.item10[0]         dom.scrollToElement(el, {})       },       goto20 (count) {         const el = this.$refs.item20[0]         dom.scrollToElement(el, { offset: 0 })       }     }   } </script> <style scoped>   .scroller {     width: 700px;     height: 700px;     border-width: 3px;     border-style: solid;     border-color: rgb(162, 217, 192);     margin-left: 25px;   }   .row {     height: 100px;     flex-direction: column;     justify-content: center;     padding-left: 30px;     border-bottom-width: 2px;     border-bottom-style: solid;     border-bottom-color: #DDDDDD;   }   .text {     font-size: 45px;     color: #666666;   }   .group {     flex-direction: row;     /*justify-content: space-around;*/     justify-content: center;     margin-top: 60px;   }   .button {     width: 200px;     padding-top: 20px;     padding-bottom: 20px;     font-size: 40px;     margin-left: 30px;     margin-right: 30px;     text-align: center;     color: #41B883;     border-width: 2px;     border-style: solid;     border-color: rgb(162, 217, 192);     background-color: rgba(162, 217, 192, 0.2);   } </style>
   | 
 
try it
getComponentRect(ref, callback) v0.9.4+
通过标签的 ref 获得其布局信息,返回的信息在 callBack 中,格式参考如下:
1 2 3 4 5 6 7 8 9 10 11
   | {   result: true,   size: {     bottom: 60,     height: 15,     left: 0,     right: 353,     top: 45,     width: 353   } }
  | 
如果想要获取到 Weex 容器的布局信息,可以指定 ref='viewport',调用例子如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
   | <template>   <div class="wrapper" style='margin-top:200px'>     <div ref="box"  class="box">       <text class="info">Width: {{size.width}}</text>       <text class="info">Height: {{size.height}}</text>       <text class="info">Top: {{size.top}}</text>       <text class="info">Bottom: {{size.bottom}}</text>       <text class="info">Left: {{size.left}}</text>       <text class="info">Right: {{size.right}}</text>     </div>
      <text class="info btn"  @click='click()'>{{this.tip}}</text>
    </div> </template> <script>   const dom = weex.requireModule('dom')
   function round(size) {       var roundSize = {         'width': Math.round(size.width),         'height': Math.round(size.height),         'top': Math.round(size.top),         'bottom': Math.round(size.bottom),         'left': Math.round(size.left),         'right': Math.round(size.right)       }       return roundSize   }   export default {     data () {       return {         size: {           width: 0,           height: 0,           top: 0,           bottom: 0,           left: 0,           right: 0         },         ref:"viewport",         tip:"get box rect"       }     },     mounted () {       const result = dom.getComponentRect(this.ref, option => {         console.log('getComponentRect:', option)         this.size = round.call(this,option.size);       })     },
      methods:{       click:function() {         if (this.ref === 'viewport') {           this.ref = this.$refs.box;           this.tip = "get viewport rect"         } else {           this.ref = 'viewport'           this.tip = "get box rect"         }
           const result = dom.getComponentRect(this.ref, option => {           console.log('getComponentRect:', option)           this.size = round.call(this,option.size);         })       }     }
    } </script> <style scoped>   .btn {     margin-top:20px;     border-width:2px;     border-style: solid;     border-radius:10px;     width:300px;     margin-left:170px;     padding-left:35px;     border-color: rgb(162, 217, 192);
    }   .btn:active {     background-color: #8fbc8f; 22border-color: gray;   }
    .box {     align-items:center;     margin-left: 150px;     width: 350px;     height: 400px;     background-color: #DDD;     border-width: 2px;     border-style: solid;     border-color: rgb(162, 217, 192);     background-color: rgba(162, 217, 192, 0.2);   }   .info {     font-size: 40px;     top:30px;     margin-left:20px;     font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;     color: #41B883;   } </style>
   | 
try it
addRule
支持版本:v0.12.0
addRule是可以为dom 添加一条规则,目前支持自定义字体fontFace规则,构建自定义的font-family,可以在text使用
fontFace
1 2 3 4 5
   | var domModule = weex.requireModule('dom'); domModule.addRule('fontFace', {     'fontFamily': "iconfont2",     'src': "url('http://at.alicdn.com/t/font_1469606063_76593.ttf')" });
  | 
 
try it
其他
dom 还有一些底层接口用于创建 Weex 实例时调用,比如 createBody、updateAttrs 等,但并未开放供外部使用。