日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vue文字走马灯(文字轮播)组件

發布時間:2024/1/8 vue 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vue文字走马灯(文字轮播)组件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有幾次遇到文字超長不能在布局內顯示完整信息,只能通過ellipsis加上省略號顯示內容,再補充title去提示完整信息,其實知道這個辦法能解決問題,但是不夠對于動效來說屬于不優雅,查詢看了部分人的想法是將文字使用translateX來移動,當然能實現,感覺動畫效果處理起來有點費勁,會很呆板。又想起vant-ui的通知欄有這個效果,就花了點時間的修改組件的源碼,進行修改成常用組件代碼的格式。整體效果功能同官網一致。將里面的rander模板換成了template模板,將里面使用的common方法直接簡化放在正常文件導入的位置了。現在完完整整就是一個單頁面組件。只是移除了close和right-icon的slot和方法。

鏈接: 這是vant-ui的官網效果,屬性也是根據官方去進行傳遞使用

調用代碼塊

<template><div style="width: 360px"><!-- <marquee left-icon="volume-o" scrollable text="無論我們能活多久,我們能夠享受的只有無法分割的此刻,此外別無其他。"></marquee> --><marquee scrollable wrapable><p>無論我們能活多久,我們能夠享受的只有無法分割的此刻,此外別無其他。</p></marquee></div> </template><script> import marquee from "@/components/marquee.vue"; export default {name: "Index",components: { marquee },data() {return { };},mounted() { },methods: {},// End }; </script>

組件代碼塊

<template><div role="alert" :class="bem({ wrapable })" :style="wrapStyl" v-show="show" @click="onClickIcon"><i v-if="leftIcon" :class="[bem('left-icon'), leftIcon]" /><div ref="wrap" role="marquee" :class="bem('wrap')"><div ref="content" :class="[bem('content'), (!!scrollable && !wrapable) && 'ellipsis']" :style="contentStyl" @transitionend="onTransitionEnd"><slot>{{ text }}</slot></div></div></div> </template><script> const isDef = (val) => val !== undefined && val !== null; const raf = fn => window.requestAnimationFrame.call(window, fn);// double raf for animation function doubleRaf(fn) {raf(raf.bind(null, fn)); }export default {name: 'marquee',props: {text: String,mode: String,color: String,leftIcon: String,wrapable: Boolean,background: String,scrollable: { type: Boolean, default: null },delay: { type: [Number, String], default: 1 },speed: { type: [Number, String], default: 50 }},data() {return {show: true,offset: 0,duration: 0,wrapWidth: 0,contentWidth: 0}},activated() {this.start();this.bind((bind) => { bind(window, 'pageshow', this.start); });},mounted() {this.bind((bind) => { bind(window, 'pageshow', this.start); });},computed: {wrapStyl() {const { color, background } = this;return { color, background }},contentStyl() {return { transform: this.offset ? "translateX(" + this.offset + "px)" : '', transitionDuration: this.duration + 's' }},bem() {return (...cls) => this.createBem('grid-item')(...cls);}},methods: {onClickIcon(event) {return;if (this.mode === 'closeable') {this.show = false;this.$emit('close', event);}},onTransitionEnd() {this.offset = this.wrapWidth;this.duration = 0; // 等待Vue渲染偏移raf(() => {// 使用雙raf確保動畫可以開始doubleRaf(() => {this.offset = -this.contentWidth;this.duration = (this.contentWidth + this.wrapWidth) / this.speed;this.$emit('replay');});});},reset() {this.offset = 0;this.duration = 0;this.wrapWidth = 0;this.contentWidth = 0;},start() {const delay = isDef(this.delay) ? this.delay * 1000 : 0;this.reset();clearTimeout(this.startTimer);this.startTimer = setTimeout(() => {const refsNode = this.$refs;const wrap = refsNode.wrap;const content = refsNode.content;if (!wrap || !content || this.scrollable === false) return;const wrapWidth = wrap.getBoundingClientRect().width;const contentWidth = content.getBoundingClientRect().width;if (this.scrollable || contentWidth > wrapWidth) {doubleRaf(() => {this.offset = -contentWidth;this.duration = contentWidth / this.speed;this.wrapWidth = wrapWidth;this.contentWidth = contentWidth;});}}, delay);},bind(handler) {handler.call(this, (target, event, handler, passive) => {if (passive === void 0) passive = false;target.addEventListener(event, handler, false);}, true);},unbind() {handler.call(this, (target, event, handler) => {target.removeEventListener(event, handler);}, true);},createBem(name) {/*** bem helper* b() // 'button'* b('text') // 'button__text'* b({ disabled }) // 'button button--disabled'* b('text', { disabled }) // 'button__text button__text--disabled'* b(['disabled', 'primary']) // 'button button--disabled button--primary'*/return function (el, mods) {function gen(name, mods) {if (!mods) return '';if (typeof mods === 'string') return " " + name + "--" + mods;if (Array.isArray(mods)) return mods.reduce((ret, item) => ret + gen(name, item), '');return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? gen(name, key) : ''), '');}if (el && typeof el !== 'string') {mods = el; el = '';}el = el ? name + "__" + el : name;return "" + el + gen(el, mods);};}},deactivated() {this.unbind((bind) => { bind(window, 'pageshow', this.start);});},beforeDestroy() {this.unbind((bind) => { bind(window, 'pageshow', this.start);});} } </script><style scoped> .notice-bar {position: relative;display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-align: center;-webkit-align-items: center;align-items: center;height: 40px;padding: 0 16px;color: #ed6a0c;font-size: 14px;line-height: 24px;background-color: #fffbe8; }.notice-bar__left-icon, .notice-bar__right-icon {min-width: 24px;font-size: 16px; }.notice-bar__right-icon {text-align: right;cursor: pointer; }.notice-bar__wrap {position: relative;display: -webkit-box;display: -webkit-flex;display: flex;-webkit-box-flex: 1;-webkit-flex: 1;flex: 1;-webkit-box-align: center;-webkit-align-items: center;align-items: center;height: 100%;overflow: hidden; }.notice-bar__content {position: absolute;white-space: nowrap;-webkit-transition-timing-function: linear;transition-timing-function: linear; }.notice-bar__content.ellipsis {max-width: 100%; }.notice-bar--wrapable {height: auto;padding: 8px 16px; }.notice-bar--wrapable .notice-bar__wrap {height: auto; }.notice-bar--wrapable .notice-bar__content {position: relative;white-space: normal;word-wrap: break-word; } </style>

總結

以上是生活随笔為你收集整理的Vue文字走马灯(文字轮播)组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷精品视频 | 国产精品爽| 波多野吉衣视频在线观看 | 蜜臀久久99精品久久久无需会员 | 久久婷婷五月综合色国产香蕉 | 李宗瑞91在线正在播放 | 久久一区欧美 | 欧美日韩电影一区二区三区 | 亚洲综合伊人 | 欧美性猛交99久久久久99按摩 | 波多野结衣视频网站 | 亚洲久热 | 1024手机看片国产 | 三上悠亚激情av一区二区三区 | 日本黄色免费视频 | 关秀媚三级 | 国产在线不卡 | 亚洲九九色 | 懂色a v| 日韩三级免费观看 | 精品一区二区三区在线视频 | 国产免费一区二区三区四区五区 | 伊人久久影视 | 亚洲国产成人精品视频 | 国产美女视频免费观看下载软件 | 婷婷午夜影院 | 亚洲黄网站在线观看 | 一二三区在线视频 | 嫩草影院污 | 亚洲黄色一区二区 | 青青自拍视频 | 亚洲欧美在线一区二区 | 亚洲 欧美 自拍偷拍 | 夜夜爽爽 | 美女扒开内看个够网站 | 婷婷爱五月天 | 久久久天堂国产精品女人 | 久久久国产精华液 | 亚洲狼人色| 在线播放成人 | 日本www高清 | 国产精品999久久久 在线青草 | 四虎午夜 | 1024av在线| www.久久综合| 久草免费资源 | 国产精品911 | 男人用嘴添女人下身免费视频 | 少妇太爽了太深了太硬了 | 成人午夜剧场视频网站 | av免费观| 久久精品99久久久久久久久 | 久久毛片| 美国免费高清电影在线观看 | 一区二区三区国产精品视频 | 91精品大片 | 激情戏网站 | 亚洲国产一区二区三区在线观看 | 男女日批免费视频 | 久久精品99久久久久久久久 | 青青草日本| 一区二区三区四区精品视频 | 91视频免费观看网站 | 香蕉久久国产av一区二区 | 日本小视频网站 | 少妇搡bbbb搡bbb搡小说 | 新中文字幕 | 麻豆久久久午夜一区二区 | 国产精品成av人在线视午夜片 | 欧美一级片a | 国产精品无码影院 | 91成人亚洲 | 国产羞羞| 免费网站污 | 日本免费不卡 | 国产女厕一区二区三区在线视 | 亚洲αv| 伊朗做爰xxxⅹ性视频 | 久操福利在线 | 日本大胆欧美人术艺术 | 成人18视频免费69 | 欧美极度另类 | 六月色婷婷 | 伊人影院99 | 成人久草 | 欧美一级淫片免费视频黄 | sese综合| 波多野结衣伦理 | 91欧美视频 | 9191在线视频| 三级黄色片网站 | 国产青青青 | 在线观看国产小视频 | 亚洲精品人妻av | 一区二区av电影 | 人人澡超碰碰97碰碰碰 | 国产成人短视频在线观看 | 999精品视频 | 国产粉嫩在线 |