初衷:

  学习完Vuejs后,来准备练习仿写一下老东家的门户页面,主要是为了熟悉一下常用插件的使用,比如video.js,wow.js,swiper等等;而其中涉及到一个包含图片跑马灯组件,大概长这样(从左到右进行轮播  ps:太懒,没有截动图):

 历程:

  像我这样的小白,立马想到的肯定不是自己写了;于是百度查阅,看有没有现成的插件之类,搜索到了vue-marquee-tips,但是查看api,自己试用了一下,发现好像只支持纯文本,无法满足需求;

  查询插件无果,又想着看一下有没有人已经写好了类似的组件,自己可以直接来用的(搜索和研究api就花费了30多分钟的时间,看来我真的很懒……),查询到一个无缝衔接的文字跑马灯,主要是用定时器对字符串进行切割和重新拼接来实现的,虽然代码实现相对简单,但对我这样的小白来说,个人觉得思路是挺不错的,这里附上链接:https://www.cnblogs.com/zhahuhu/p/11592400.html,但是该组件还是只能用于文字,无法满足需求;

  终于,我放弃了找现成插件的想法(或许是百度用的不好吧……),准备自己封装一个跑马灯组件;

实现思路:

  之前学习js的时候,使用定时器做过一个轮播图组件,考虑到跑马灯应该与之类似,只是定时器设置时间较短而已

  首先使用一个外层div来包裹住展示区域div,外层div设置overflow:hidden,子绝父相进行定位,再定时改变子div的left,考虑到如果不设置条件判断,left会一直改变,所以要在left达到某个值时,将left设置回去,这样就可以实现一直轮播的效果,具体代码如下:

 <template>
<div class="marquee">
<div class="marquee-content" @mouseover="clearTimer" @mouseout='startTimer'>
<div class="img-item" v-for="(item,index) in imglists" :key="index">
<img :src="item" alt="">
<span>视频点播</span>
</div>
</div>
</div>
</template> <script>
export default {
name: "Marquee",
components: {
},
data() {
return {
imglists: [],
timer: ''
};
},
created() {
for (var i = 1; i < 18; i++) {
this.imglists.push('http://www.360tianma.com/application/cms/static/images/component'+i+'.png')
}
this.imglists.push('http://www.360tianma.com/application/cms/static/images/component1.png')
// console.log(this.imglists)
},
mounted() {
this.startTimer();
},
methods: {
clearTimer() {
clearInterval(this.timer)
},
startTimer() {
var content = document.querySelector('.marquee-content');
this.timer = setInterval(() => {
var oldleftstr = getComputedStyle(content,null).left
var oldleft = parseInt(oldleftstr);
content.style.left = oldleft-1 + 'px'
if (oldleft <= -2925) {
content.style.left = 0
}
}, 10);
}
} };
</script> <style scoped>
.marquee {
width: 1140px;
height: 80px;
margin: 0 auto;
position: relative;
overflow: hidden;
margin-top: 100px;
padding: 15px;
}
.marquee-content {
width: 4050px;
position: absolute;
left: 0;
} .img-item {
width: 225px;
height: 80px;
line-height: 80px;
float: left;
text-align: center;
}
img {
width: 50px;
height: 50px;
}
</style>

  注:因为是仿写,主要练习功能实现,所以上述代码中的图片都用for循环来添加成一样的了

个人总结:

  上述代码虽然简单,而且也存在不少缺陷,但是也为今后解决类似的问题提供一种思路;对于我这样的小白也算是多一次练习和提升;以后遇到类似的组件,可能会多想到自己来封装,而非找其他插件;

该仿写页面已完成,github:https://github.com/Xiaohuimao/Vue-tianma.git,感兴趣的同学可自行查阅(该项目文件组织有点惨不忍睹,还望不要吐槽)

使用vue.js封装一个包含图片的跑马灯组件的更多相关文章

  1. vue.js 作一个用户表添加页面----初级

    使用vue.js 制作一个用户表添加页面,实际上是把原来需要使用js写的部分,改写成vue.js的格式 首先,想象一下,先做思考,我们要添加用户表,设涉及到哪些数据,一个是用户id,一个是用户名,一个 ...

  2. ionic js 滑动框ion-slide-box 滑动框是一个包含多页容器的组件,每页滑动或拖动切换

    ionic 滑动框 ion-slide-box 滑动框是一个包含多页容器的组件,每页滑动或拖动切换: 效果图如下: 用法 <ion-slide-box on-slide-changed=&quo ...

  3. 使用 JS 实现图片左右跑马灯

    Ø  前言 之前写了一篇使用 JS 实现文字上下跑马灯,现在乘热打铁在把图片左右跑马灯一起贴出来,不多说直接看代码. 1.   首先定义 css 样式 <style type="tex ...

  4. vue中封装一个全局的弹窗js

    /** * Created by yx on 2017/12/21. */ export default { /** * 带按钮的弹框 * <!--自定义提示标题,内容,单个按钮事件--> ...

  5. 用Vue.js开发一个电影App的前端界面

    我们要构建一个什么样的App? 我们大多数人使用在线流媒体服务(如Netflix)观看我们最喜欢的电影或者节目.这篇文章将重点介绍如何通过使用vue.js 2 建立一个类似风格的电影流媒体WEB交互界 ...

  6. 结合Vue.js的前端压缩图片方案

    这是一个很简单的方案.嗯,是真的. 为什么要这么做? 在移动Web蓬勃发展的今天,有太多太多的应用需要让用户在移动Web上传图片文件了,正因如此,我们有些困难必须去攻克: 低网速下上传进度缓慢,用户体 ...

  7. Vue.js实现一个SPA登录页面的过程

    技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cooki ...

  8. 用Vue.js搭建一个小说阅读网站

    目录 1.简介 2.如何使用vue.js 3.部署api服务器 4.vue.js路由配置 5.实现页面加载数据 6.测试vue项目 7.在正式环境部署 8.Vue前端代码下载 1.简介 这是一个使用v ...

  9. Vue.js写一个SPA登录页面的过程

    技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cooki ...

随机推荐

  1. adb基本命令操作(四)

    一,基本操作命令 adb shell:进入手机系统 说明:root表示手机当前的操作用户,也是最高权限操作者 cd ,可以切换目录,执行cd /sdcard  表示手机内部的存储路径,也是表示内部存储 ...

  2. NSObject常用方法

    类 @interface NSObject <NSObject> { Class isa OBJC_ISA_AVAILABILITY; } // 初始化加载 + (void)load; / ...

  3. mac 根目录下新建文件夹并赋予权限

    在根目录中,你会发现你无法创建文件夹,即使使用命令也无法创建目录: 1.修改auto_master 编译 /etc/auto_master 文件,注释掉或者移除以 /home 开头的那一行,保存. 终 ...

  4. __str_方法和__repr__的区别

    __str__方法和__repr__方法: 官方文档解释: Object.__repr__(self): 由 repr() 内置函数调用以输出一个对象的“官方”字符串表示.如果可能,这应类似一个有效的 ...

  5. 用pymysql和Flask搭建后端,响应前端POST和GET请求

    前言 这次作业不仅需要我建立一个数据库(详情请点击这里),还需要我基于这个数据库写后端接口(注册和登录)供前端访问,接收前端的POST和GET请求,并将登录.注册是否成功传给前端. 本文介绍如何用Fl ...

  6. Centos7 中打开和关闭防火墙及端口

    1.firewalld的基本使用 启动: systemctl start firewalld 关闭: systemctl stop firewalld 查看状态: systemctl status f ...

  7. docker安装Elasticsearch7.6集群并设置密码

    docker安装Elasticsearch7.6集群并设置密码 Elasticsearch从6.8开始, 允许免费用户使用X-Pack的安全功能, 以前安装es都是裸奔.接下来记录配置安全认证的方法. ...

  8. Java 虚拟机运行时数据区

    写在前面 本文描述的有关于 JVM 的运行时数据区是基于 HotSpot 虚拟机. 概述 JVM 在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以 ...

  9. Zookeeper是如何实现分布式锁的

    [toc] Zookeeper是如何实现分布式锁的 标签 : Zookeeper 分布式 实现分布式锁要考虑的重要问题 1. 三个核心要素 加锁, 解锁, 锁超时 2. 三个问题 要保证原子性操作, ...

  10. PTA数据结构与算法题目集(中文) 7-41PAT排名汇总 (25 分)

    PTA数据结构与算法题目集(中文)  7-41PAT排名汇总 (25 分) 7-41 PAT排名汇总 (25 分)   计算机程序设计能力考试(Programming Ability Test,简称P ...