小程序自定义组件的制作的使用,文字流动效果示例

组件wxml代码

<scroll-view class="container">
   <view class="scrolltxt">
      <view class="marquee_box">
         <view class="marquee_text" >
            <text>{{text}}</text>
            <text ></text>
            <text >{{text}}</text>
         </view>
      </view>
   </view>
</scroll-view>

组件wxss代码

 1 .container {
 2    width: 100%;
 3    height: 100%;
 4    display: flex;
 5    flex-direction: column;
 6    justify-content: space-between;
 7    flex-wrap: nowrap;
 8    box-sizing: border-box;
 9    background: #f9db84;
10 }
11 
12 .scrolltxt {
13    padding: 0 10rpx;
14    box-shadow: 0px 0px 10rpx 2rpx red inset;
15 }
16 
17 .marquee_box {
18    position: relative; /*相对定位*/
19    color: #333;
20    height: 50rpx;
21    display: block; /*此元素将显示为块级元素,此元素前后会带有换行符。*/
22    overflow: hidden; /*溢出部分隐藏*/
23 }
24 
25 .marquee_text {
26    white-space: nowrap; /*    文本不会换行,文本会在在同一行上继续,直到遇到 <br> 标签为止。*/
27    position: absolute; /*绝对定位*/
28    height: 50rpx;
29    color: #6b5924;
30    top: 0;
31    font-size: 24rpx;
32    font-weight: 700; /*字体加粗*/
33    letter-spacing: 2rpx; /*字体间隔*/
34    line-height: 50rpx; /*行高*/
35 }

组件js代码

 1 // com/gonggao/gonggao.js
 2 Component({
 3    /**
 4     * 组件的属性列表
 5     */
 6    properties: {
 7       text: String,
 8    },
 9 
10    /**
11     * 组件的初始数据
12     */
13    data: {
14       marqueePace: 1,//滚动速度
15       marqueeDistance: 0,//初始滚动距离
16       marquee_margin: 30,
17       size: 14,
18       interval: 25 // 时间间隔
19    },
20 
21    attached: function() {
22       var that = this;
23       var length = that.data.text.length * that.data.size;//文字长度
24       var windowWidth = wx.getSystemInfoSync().windowWidth;// 屏幕宽度
25       that.setData({
26          length: length,
27          windowWidth: windowWidth
28       });
29       that.scrolltxt();// 第一个字消失后立即从右边出现
30    },
31    /**
32     * 组件的方法列表
33     */
34    methods: {
35       scrolltxt: function () {
36          var that = this;
37          var length = that.data.length;//滚动文字的宽度
38          var windowWidth = that.data.windowWidth;//屏幕宽度
39          if (length > windowWidth) {
40             var interval = setInterval(function () {
41                var maxscrollwidth = length + that.data.marquee_margin;//滚动的最大宽度,文字宽度+间距,如果需要一行文字滚完后再显示第二行可以修改marquee_margin值等于windowWidth即可
42                var crentleft = that.data.marqueeDistance;
43                if (crentleft < maxscrollwidth) {//判断是否滚动到最大宽度
44                   that.setData({
45                      marqueeDistance: crentleft + that.data.marqueePace
46                   })
47                }
48                else {
49                   //  console.log("替换");
50                   that.setData({
51                      marqueeDistance: 0 // 直接重新滚动
52                   });
53                   clearInterval(interval);
54                   that.scrolltxt();
55                }
56             }, that.data.interval);
57          }
58          else {
59             that.setData({ marquee_margin: "1000" });//只显示一条不滚动右边间距加大,防止重复显示
60          }
61       }
62    }
63 })

系统创建JS的时候是没有attached的,可以自行创建,把直接需要运行的js代码写进去 ;

而properties和data在运行的时候是合并起来的,不管是用this.data.xxx或者this.properties.xxx都能调用,但是往js里面传值的就要把要传的值提前在properties里面定义类型,无需改变的值可以写在data里面;

自定义的方法要写在methods里面

引用页面的json代码:

1 {
2    "usingComponents": {
3       "gonggao":"/com/gonggao/gonggao"
4    }
5 }

这里注意usingComponents里面的格式是"key":"路径",KEY是定义的组件名,路径建议是绝对路径

引用页面的wxml代码:

<gonggao text="{{content}}"/>

这里面的text这个名称要和组件js里面 properties: {text: String,}这个名称做对照 gonggao标签就是在json里面定义的组件名

引用页面的js代码:

 1 Page({
 2    /**
 3     * 页面的初始数据
 4     */
 5    data: {
 6       content: "这是一条测试数据 这是一条测试数据 这是一条测试数据 这是一条测试数据"
 7    },
 8 
 9    /**
10     * 生命周期函数--监听页面加载
11     */
12    onLoad: function (options) {
13 
14    }
15 
16 })