微信小程序实现跑马灯效果


Posted in Javascript onOctober 21, 2020

网上很多实现跑马灯的文章,但是很多发现都是不行的,之一就是文字宽度居然是通过字符数*文字size计算,明显是不准确的计算方式。我看了下,发现可以通过计算控件宽度来精确计算文字宽度,这样实现的跑马灯是比较完善的。

效果如下:

微信小程序实现跑马灯效果

实现代码如下:

wxml:

<view class="rollCon">
 <view class='box'> 
 <view class='text'style='left:{{offsetLeft}}px' >{{text}}</view>
</view>
</view>

wxss:

.rollCon {
 position: fixed;
 top: 0;
 left: 0;
 width: 100%;
 height: 60rpx;
 z-index: 100;
 background: #fde8c7;
 font-size: 20rpx;
 line-height: 60rpx;
}

.box {
 width: 100%;
 position: relative;
}

.text {
 white-space: nowrap;
 position: absolute;
 top: 0;
 font-size: 24px;
}

js:

Page({

 /**
 * 页面的初始数据
 */
 data: {
 interval: null,
 text: '995年JavaScript诞生时如早一年',
 pace: 1.2, //滚动速度
 interval: 20, //时间间隔
 size: 24, //字体大小in px
 length: 0, //字体宽度
 offsetLeft: 0, //
 windowWidth: 0,
 },
 //根据viewId查询view的宽度
 queryViewWidth: function(viewId) {
 //创建节点选择器
 return new Promise(function(resolve) {
  var query = wx.createSelectorQuery();
  var that = this;
  query.select('.' + viewId).boundingClientRect(function(rect) {
  resolve(rect.width);
  }).exec();
 });

 },
 //停止跑马灯
 stopMarquee: function() {
 var that = this;
 //清除旧的定时器
 if (that.data != null) {
  clearInterval(that.interval);
 }
 },
 //执行跑马灯动画
 excuseAnimation: function() {
 var that = this;
 if (that.data.length > that.data.windowWidth) {
  //设置循环
  let interval = setInterval(function() {
  if (that.data.offsetLeft <= 0) {
   if (that.data.offsetLeft >= -that.data.length) {
   that.setData({
    offsetLeft: that.data.offsetLeft - that.data.pace,
   })
   } else {
   that.setData({
    offsetLeft: that.data.windowWidth,
   })
   }
  } else {
   that.setData({
   offsetLeft: that.data.offsetLeft - that.data.pace,
   })
  }
  }, that.data.interval);
 }
 },
 //开始跑马灯
 startMarquee: function() {
 var that = this;
 that.stopMarquee();
 //初始化数据
 that.data.windowWidth = wx.getSystemInfoSync().windowWidth;
 that.queryViewWidth('text').then(function(resolve) {
  that.data.length = resolve;
  console.log(that.data.length + "/" + that.data.windowWidth);
  that.excuseAnimation();
 });
 }
 })

源码下载:跑马灯效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JSChart轻量级图形报表工具(内置函数中文参考)
Oct 11 Javascript
JavaScript 小型打飞机游戏实现原理说明
Oct 28 Javascript
ie8下修改input的type属性报错的解决方法
Sep 16 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
Mar 04 Javascript
JS判断时间段的实现代码
Jun 14 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
JavaScript高级函数应用之分时函数实例分析
Aug 03 Javascript
vue如何进行动画的封装
Sep 26 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
Nov 08 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
Nov 24 Javascript
原生js中运算符及流程控制示例详解
Jan 05 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 #Javascript
vue.js自定义组件directives的实例代码
Nov 09 #Javascript
详解处理Vue单页面应用SEO的另一种思路
Nov 09 #Javascript
webpack 静态资源集中输出的方法示例
Nov 09 #Javascript
vue中如何去掉空格的方法实现
Nov 09 #Javascript
Vue press 支持图片放大功能的实例代码
Nov 09 #Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 #Javascript
You might like
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
2014/04/09 PHP
PHP生成条形图的方法
2014/12/10 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
PHP编程实现脚本异步执行的方法
2017/08/09 PHP
Jquery中val()表单取值赋值的实例代码
2013/08/15 Javascript
jquery实现的网页自动播放声音
2014/04/30 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
angular2使用简单介绍
2016/03/01 Javascript
详解JavaScript中的自定义事件编写
2016/05/10 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
JS使用正则截取两个字符串之间的字符串实现方法详解
2017/01/06 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
详解vue2.0监听属性的使用心得及搭配计算属性的使用
2018/07/18 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
Python 专题一 函数的基础知识
2017/03/16 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python中可以声明变量类型吗
2020/06/18 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
加利福尼亚州威尼斯的女性奢侈品设计师服装和概念店:Mona Moore
2018/09/13 全球购物
Feelunique澳大利亚:欧洲的化妆品零售电商
2019/12/18 全球购物
民警个人对照检查剖析材料
2014/09/17 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
少年雷锋观后感
2015/06/10 职场文书
趣味运动会赞词
2015/07/22 职场文书
Python中glob库实现文件名的匹配
2021/06/18 Python
带你了解Java中的ForkJoin
2022/04/28 Java/Android