BindingX

BindingX是解决 Weex 中富交互问题的一直解决方案。

BindingX 可以让手势等复杂交互操作以60fps的帧率流畅执行,而不会导致卡顿,因而带来了更优秀的用户体验。

效果示例如下:

示例代码:

<template>
  <div>
    <div class="header" >
      <image ref="image" class="headerImg" src="https://img.alicdn.com/tfs/TB1SOyrSVXXXXb3XXXXXXXXXXXX-1000-667.jpg"></image>
      <div ref="head_bar" class="head_bar">
        <text class="title">aweome binding</text>
      </div>
      <image class="circle" ref="circle" src="https://img.alicdn.com/tfs/TB1KXuHQVXXXXazXFXXXXXXXXXX-750-499.jpg">
        
      </image>
    </div>

    <list class="list" ref="list" >
      <cell class="blankHeader">
      </cell>
      
      <cell v-for="(item, index) in items" :key="item.src" class="cell" ref="index">
        <div class="item">
          <text v-if="item.name" class="itemName">{{item.name}}</text>
          <image class="itemPhoto" :src="item.src"></image>
          <text v-if="item.desc" class="itemDesc">{{item.desc}}</text>
          <text v-if="item.behaviourName" class="itemClickBehaviour"> {{item.behaviourName}}</text>
        </div>
      </cell>
     
    </list>
  </div>
</template>

<style scoped>
  .head_bar {
    position:absolute;
    width:750px;
    height:120px;
    background-color:#6A1B9A;
    opacity:0;
    justify-content:center;
    align-items:center;
    
  }
  .title {
    color: #ffffff;
    font-size:32px;
    
  }
  .circle {
    width:250px;
    height:250px;
    border-radius:125px;
    background-color:#ff0000;
    margin-left:250px;
    margin-top:205px;
  }
  .header {
    width:750px;
    height: 700px;
    position:absolute;
  }
  .headerImg {
    height: 700px;
    width: 750px;
    position:absolute;
  }
  .list {
    margin-top:120px;
    width: 750px;
  }
  .blankHeader {
    height:580px;
  }
  .item {
    background-color: #FFFFFF;
    align-items: center;
  }
  .itemName {
    font-size:28;
    color:#333333;
    line-height:42;
    text-align:left;
    margin-top: 24;
  }
  .itemPhoto {
    margin-top: 18;
    width: 220;
    height: 220;
    margin-bottom: 18;
  }
  .itemDesc {
    font-size:24;
    margin:12;
    color:#999999;
    line-height:36;
    text-align:left;
  }
  .itemClickBehaviour {
    font-size:36;
    color:#00cc99;
    line-height:36;
    text-align:center;
    margin-top: 6;
    margin-left: 24;
    margin-right: 24;
    margin-bottom: 30;
  }
</style>
<script>
  module.exports = {
    methods: {

    },
    created: function() {
      
    },
    mounted: function() {
      console.log("mounted!!!!!!");
      
      const binding = weex.requireModule('bindingx');
      var timer = weex.requireModule('timer');
      var self = this;
      timer.setTimeout(function(){
       var list =self.$refs.list.ref;
	     var circle = self.$refs.circle.ref;
	     var image = self.$refs.image.ref;
	     var head_bar = self.$refs.head_bar.ref;


       var image_origin = "0-min(300,y/580*300)";
	     var image_transformed = "{\"type\":\"-\",\"children\":[{\"type\":\"NumericLiteral\",\"value\":0},{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"min\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"NumericLiteral\",\"value\":300},{\"type\":\"*\",\"children\":[{\"type\":\"/\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]},{\"type\":\"NumericLiteral\",\"value\":300}]}]}]}]}"
	     
	     var circle_scale_orign = "max(1-min(y,580)/580,0.4)" //1--->0.4
	     var circle_scale_transformed = "{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"max\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"-\",\"children\":[{\"type\":\"NumericLiteral\",\"value\":1},{\"type\":\"/\",\"children\":[{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"min\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":0.4}]}]}"
       
       var circle_translate_x_origin = "(0-min(y,580)/580)*295"//0---> -250    0 660  (0-y/660)*250
       var circle_translate_x_transformed = "{\"type\":\"*\",\"children\":[{\"type\":\"-\",\"children\":[{\"type\":\"NumericLiteral\",\"value\":0},{\"type\":\"/\",\"children\":[{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"min\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":295}]}"
       
       var circle_translate_y_origin = "(0-min(y,580)/580)*268"//0---> -205  0 660   (0-y/660)*205
       var circle_translate_y_transformed = "{\"type\":\"*\",\"children\":[{\"type\":\"-\",\"children\":[{\"type\":\"NumericLiteral\",\"value\":0},{\"type\":\"/\",\"children\":[{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"min\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":268}]}" 
	    
	    var head_opacity_origin = "min(y,580)/580"//0.0-1.0  0 580
	    var head_opacity_transformed = "{\"type\":\"/\",\"children\":[{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"min\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]}]},{\"type\":\"NumericLiteral\",\"value\":580}]}"
	    
	    var head_background_origin = "evaluateColor('#6A1B9A','#FF9800',(y<=580?0:min(500,y-580)/500))"//#6A1B9A-->>  #CDDC39 580--> 1080
	    var head_background_transformed = "{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"evaluateColor\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"StringLiteral\",\"value\":\"'#6A1B9A'\"},{\"type\":\"StringLiteral\",\"value\":\"'#FF9800'\"},{\"type\":\"?\",\"children\":[{\"type\":\"<=\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]},{\"type\":\"NumericLiteral\",\"value\":0},{\"type\":\"/\",\"children\":[{\"type\":\"CallExpression\",\"children\":[{\"type\":\"Identifier\",\"value\":\"min\"},{\"type\":\"Arguments\",\"children\":[{\"type\":\"NumericLiteral\",\"value\":500},{\"type\":\"-\",\"children\":[{\"type\":\"Identifier\",\"value\":\"y\"},{\"type\":\"NumericLiteral\",\"value\":580}]}]}]},{\"type\":\"NumericLiteral\",\"value\":500}]}]}]}]}"
	    
	     var result = binding.bind({
	       eventType:'scroll',
	       anchor:list,
	       props:[
	          {
	            element:image,
	            property:'transform.translateY',
	            expression:{
	              origin:image_origin,
	              transformed: image_transformed
	            }
	          },
	          {
	            element:circle,
	            property:'transform.scaleX',
	            expression:{
	              origin:circle_scale_orign,
	              transformed: circle_scale_transformed
	            }
	          },
	          {
	            element:circle,
	            property:'transform.scaleY',
	            expression:{
	              origin:circle_scale_orign,
	              transformed: circle_scale_transformed
	            }
	          },
	          //circle: translate_x
	          {
	            element:circle,
	            property:'transform.translateX',
	            expression:{
	              origin:circle_translate_x_origin,
	              transformed: circle_translate_x_transformed
	            }
	          },
	          //circle: translate_y
	          {
	            element:circle,
	            property:'transform.translateY',
	            expression:{
	              origin: circle_translate_y_origin,
	              transformed: circle_translate_y_transformed
	            }
	          },
	         //head: opacity
	          {
	            element:head_bar,
	            property:'opacity',
	            expression:{
	              origin: head_opacity_origin,
	              transformed: head_opacity_transformed
	            }
	          },
	          //head: background
	          {
	            element:head_bar,
	            property:'background-color',
	            expression:{
	              origin: head_background_origin,
	              transformed: head_background_transformed 
	            }
	          },
	          
	         ]
	      },function(e){
	       
	      })

      },200);
    },
    data: function() {
      const items = [
        {
          src:'https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg',
          name: 'Thomas Carlyle',
          desc:'Genius only means hard-working all one\'s life',
          behaviourName: '#### NO.1',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1Hv1JPFXXXXa3XXXXXXXXXXXX-370-370.jpg',
          desc:'The man who has made up his mind to win will never say "impossible "',
          behaviourName: '#### NO.2',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1eNKuPFXXXXc_XpXXXXXXXXXX-370-370.jpg',
          desc:'There is no such thing as a great talent without great will - power',
          behaviourName: '#### NO.3',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1DCh8PFXXXXX7aXXXXXXXXXXX-370-370.jpg',
          name:'Addison',
          desc:'Cease to struggle and you cease to live',
          behaviourName: '#### NO.4',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1ACygPFXXXXXwXVXXXXXXXXXX-370-370.jpg',
          desc:'A strong man will struggle with the storms of fate',
          behaviourName: '#### NO.5',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1IGShPFXXXXaqXVXXXXXXXXXX-370-370.jpg',
          name:'Ruskin',
          desc:'Living without an aim is like sailing without a compass',
          behaviourName: '#### NO.6',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1xU93PFXXXXXHaXXXXXXXXXXX-240-240.jpg',
          behaviourName: '#### NO.7',
        },
        {
          src:'https://gw.alicdn.com/tps/TB19hu0PFXXXXaXaXXXXXXXXXXX-240-240.jpg',
          name:'Balzac',
          desc:'There is no such thing as a great talent without great will - power',
          behaviourName: '#### NO.8',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1ux2vPFXXXXbkXXXXXXXXXXXX-240-240.jpg',
          behaviourName: '#### NO.9',
        },
        {
          src:'https://gw.alicdn.com/tps/TB1tCCWPFXXXXa7aXXXXXXXXXXX-240-240.jpg',
          behaviourName: '#### NO.10',
        }
      ]

      let repeatItems = [];
      for (let i = 0; i < 3; i++) {
        repeatItems.push(...items)
      }

      return {
  
        items: repeatItems
      }
    },
  }
</script>