zoukankan      html  css  js  c++  java
  • 微信小程序跑马灯效果--基于CSS3 animation 及 基于JS

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人。谢谢大家!❤

    如果解决不了,可以在文末进群交流。

    基于CSS3主要代码实现

    效果图:

    视图模板wxml中:

    <view class="marquee_container" style="--marqueeWidth--:-12em">
        <view class="marquee_text">测试跑马灯效果</view>
    </view>

    样式wxss中:

    @keyframes around {
      from {
       margin-left: 100%;
      }
      to {
       /* var接受传入的变量 */
       margin-left: var(--marqueeWidth--);
      }
     }
     
    .marquee_container{
      background-color: #000;
      height: 40rpx;
      line-height: 40rpx;
      position: relative;
       100%;
    }
    .marquee_container:hover{
      /* 不起作用 */
      animation-play-state: paused;
    }
    .marquee_text{
      color:#b4b4b4;
      font-size: 28rpx;
      display: inline-block;
      white-space: nowrap;
      animation-name: around;
      animation-duration: 10s;  /*过渡时间*/
      animation-iteration-count: infinite;
      animation-timing-function:linear;
    }

    基于JS主要代码实现:

    WXML代码:

    <view>1 显示完后再显示</view>
    <view class="example">
      <view class="marquee_box">
        <view class="marquee_text" style="{{orientation}}:{{marqueeDistance}}px;font-size: {{size}}px;">
          {{text}}
        </view>
      </view>
    </view>
    <view>2 出现白边后即显示</view>
    <view class="example">
      <view class="marquee_box">
        <view class="marquee_text" style="{{orientation}}:{{marqueeDistance2}}px;font-size: {{size}}px;">
          <text>{{text}}</text>
          <text wx:if="{{marquee2copy_status}}" style="margin-left:{{marquee2_margin}}px;">{{text}}</text>
        </view>
      </view>
    </view>

    wxss代码:

    .example {
      display: block;
       100%;
      height: 100rpx;
    }
    
    .marquee_box {
       100%;
      position: relative;
    }
    
    .marquee_text {
      white-space: nowrap;
      position: absolute;
      top: 0;
    }

    JS代码:

    Page({
      data: {
        text: '这是一条会滚动的文字滚来滚去的文字跑马灯,哈哈哈哈哈哈哈哈',
        marqueePace: 1,//滚动速度
        marqueeDistance: 0,//初始滚动距离
        marqueeDistance2: 0,
        marquee2copy_status: false,
        marquee2_margin: 60,
        size: 14,
        orientation: 'left',//滚动方向
        interval: 20 // 时间间隔
      },
      onShow: function () {
        // 页面显示
        var vm = this;
        var length = vm.data.text.length * vm.data.size;//文字长度
        var windowWidth = wx.getSystemInfoSync().windowWidth;// 屏幕宽度
        vm.setData({
          length: length,
          windowWidth: windowWidth,
          marquee2_margin: length < windowWidth ? windowWidth - length : vm.data.marquee2_margin//当文字长度小于屏幕长度时,需要增加补白
        });
        vm.run1();// 水平一行字滚动完了再按照原来的方向滚动
        // vm.run2();// 第一个字消失后立即从右边出现
      },
      run1: function () {
        var vm = this;
        var interval = setInterval(function () {
          if (-vm.data.marqueeDistance < vm.data.length) {
            vm.setData({
              marqueeDistance: vm.data.marqueeDistance - vm.data.marqueePace,
            });
          } else {
            clearInterval(interval);
            vm.setData({
              marqueeDistance: vm.data.windowWidth
            });
            vm.run1();
          }
        }, vm.data.interval);
      },
      run2: function () {
        var vm = this;
        var interval = setInterval(function () {
          if (-vm.data.marqueeDistance2 < vm.data.length) {
            // 如果文字滚动到出现marquee2_margin=30px的白边,就接着显示
            vm.setData({
              marqueeDistance2: vm.data.marqueeDistance2 - vm.data.marqueePace,
              marquee2copy_status: vm.data.length + vm.data.marqueeDistance2 <= vm.data.windowWidth + vm.data.marquee2_margin,
            });
          } else {
            if (-vm.data.marqueeDistance2 >= vm.data.marquee2_margin) { // 当第二条文字滚动到最左边时
              vm.setData({
                marqueeDistance2: vm.data.marquee2_margin // 直接重新滚动
              });
              clearInterval(interval);
              vm.run2();
            } else {
              clearInterval(interval);
              vm.setData({
                marqueeDistance2: -vm.data.windowWidth
              });
              vm.run2();
            }
          }
        }, vm.data.interval);
      }
    });

    废话不多说了,直接上代码,不懂地方可留言,或者进微信群内交流。群二维码如果过期,请加我微信:mengyilingjian.

  • 相关阅读:
    ubuntu下安装maven
    159.Longest Substring with At Most Two Distinct Characters
    156.Binary Tree Upside Down
    155.Min Stack
    154.Find Minimum in Rotated Sorted Array II
    153.Find Minimum in Rotated Sorted Array
    152.Maximum Product Subarray
    151.Reverse Words in a String
    150.Evaluate Reverse Polish Notation
    149.Max Points on a Line
  • 原文地址:https://www.cnblogs.com/mengyilingjian/p/11699852.html
Copyright © 2011-2022 走看看