style:通知公告
Showing
4 changed files
with
161 additions
and
19 deletions
src/components/NoticeBar/index.vue
0 → 100644
| 1 | <template> | ||
| 2 | <div class="my-outbox"> | ||
| 3 | <div class="my-inbox" ref='box'> | ||
| 4 | <div class="my-list" :style="note" v-for="(item,index) in sendVal" :key='index' ref='list'> | ||
| 5 | <span class="my-uname">{{ item }}</span> | ||
| 6 | </div> | ||
| 7 | </div> | ||
| 8 | </div> | ||
| 9 | </template> | ||
| 10 | |||
| 11 | <script> | ||
| 12 | export default { | ||
| 13 | name: 'my-marquee-left', | ||
| 14 | props: { | ||
| 15 | sendVal: { | ||
| 16 | type: Array, | ||
| 17 | default: [] | ||
| 18 | } | ||
| 19 | }, | ||
| 20 | data () { | ||
| 21 | return { | ||
| 22 | note: { | ||
| 23 | backgroundSize: "20px 20px", | ||
| 24 | backgroundRepeat: "no-repeat", | ||
| 25 | backgroundPosition: "1% 50%" | ||
| 26 | }, | ||
| 27 | // 定时器标识 | ||
| 28 | nowTime: null, | ||
| 29 | // 每一个内容的宽度 | ||
| 30 | disArr: [] | ||
| 31 | } | ||
| 32 | }, | ||
| 33 | mounted () { | ||
| 34 | // var that = this | ||
| 35 | var item = this.$refs.list | ||
| 36 | var len = this.sendVal.length | ||
| 37 | var arr = [] | ||
| 38 | // 因为设置的margin值一样,所以取第一个就行。 | ||
| 39 | var margin = this.getMargin(item[0]) | ||
| 40 | for (var i = 0; i < len; i++) { | ||
| 41 | arr.push(item[i].clientWidth + margin) // 把宽度和 margin 加起来就是每一个元素需要移动的距离 | ||
| 42 | } | ||
| 43 | this.disArr = arr | ||
| 44 | this.moveLeft() | ||
| 45 | }, | ||
| 46 | beforeDestroy () { | ||
| 47 | // 页面关闭清除定时器 | ||
| 48 | clearInterval(this.nowTime) | ||
| 49 | // 清除定时器标识 | ||
| 50 | this.nowTime = null | ||
| 51 | }, | ||
| 52 | methods: { | ||
| 53 | // 获取margin属性 | ||
| 54 | getMargin (obj) { | ||
| 55 | var marg = window.getComputedStyle(obj, null)['margin-right'] | ||
| 56 | marg = marg.replace('px', '') | ||
| 57 | return Number(marg) // 强制转化成数字 | ||
| 58 | }, | ||
| 59 | // 移动的方法 | ||
| 60 | moveLeft () { | ||
| 61 | var that = this | ||
| 62 | var outbox = this.$refs.box | ||
| 63 | // 初始位置 | ||
| 64 | var startDis = 0 | ||
| 65 | // console.log('that.disArr: ', that.disArr) | ||
| 66 | this.nowTime = setInterval(function () { | ||
| 67 | startDis -= 0.5 | ||
| 68 | // console.log('初始化移动:', startDis) | ||
| 69 | if (Math.abs(startDis) > Math.abs(that.disArr[0])) { | ||
| 70 | // 每次移动完一个元素的距离,就把这个元素的宽度 | ||
| 71 | that.disArr.push(that.disArr.shift()) | ||
| 72 | // 每次移动完一个元素的距离,就把列表数据的第一项放到最后一项 | ||
| 73 | // console.log('that.sendVal: ', that.sendVal) | ||
| 74 | // console.log('that.sendVal: ', that.sendVal.shift()) | ||
| 75 | that.sendVal.push(that.sendVal.shift()) | ||
| 76 | startDis = 0 | ||
| 77 | // console.log('移动') | ||
| 78 | } else { | ||
| 79 | // console.log('不来不来就不来...') | ||
| 80 | } | ||
| 81 | // 每次都让盒子移动指定的距离,在我自己做的项目中,这种字符串拼接的方法并没有生效 | ||
| 82 | // outbox.style = 'transform: translateX3d(' + startDis + 'px)' | ||
| 83 | // 后面换了es6的模板字符串就可以了 | ||
| 84 | outbox.style = `transform: translateX(${startDis}px)` | ||
| 85 | // outbox.style = 'transform: translateX(\' + startDis + \' px)' | ||
| 86 | // outbox.style.marginLeft = 'startDis' | ||
| 87 | // console.log('这里:', startDis) | ||
| 88 | }, 1000 / 60) | ||
| 89 | } | ||
| 90 | } | ||
| 91 | } | ||
| 92 | </script> | ||
| 93 | |||
| 94 | <style lang="scss" scoped> | ||
| 95 | .my-outbox { | ||
| 96 | color: #fff; | ||
| 97 | overflow: hidden; | ||
| 98 | line-height: 28px; | ||
| 99 | // background: $light-blue; | ||
| 100 | width: 500px; | ||
| 101 | |||
| 102 | .my-inbox { | ||
| 103 | white-space: nowrap; | ||
| 104 | |||
| 105 | .my-list { | ||
| 106 | margin-right: 15px; | ||
| 107 | display: inline-block; | ||
| 108 | font-size: 14px; | ||
| 109 | text-indent: 30px; | ||
| 110 | |||
| 111 | .my-uname { | ||
| 112 | color: #fff; | ||
| 113 | } | ||
| 114 | } | ||
| 115 | } | ||
| 116 | } | ||
| 117 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 1 | <template> | 1 | <template> |
| 2 | <div class="navbar" v-theme.background="mTheme"> | 2 | <div class="navbar-con"> |
| 3 | <div class="logo"> | 3 | <div class="navbar" v-theme.background="mTheme"> |
| 4 | <img v-if="logo" :src="logo" class="header-logo"> | 4 | <div class="logo"> |
| 5 | </div> | 5 | <img v-if="logo" :src="logo" class="header-logo"> |
| 6 | <div class="backdrop"> | 6 | </div> |
| 7 | <theme style="float: right;height: 26px;width: 26px;margin-top: 26px;" @change="themeChange" /> | 7 | <div class="backdrop"> |
| 8 | </div> | 8 | <theme style="float: right;height: 26px;width: 26px;margin-top: 26px;" @change="themeChange" /> |
| 9 | <div class="right-menu"> | 9 | </div> |
| 10 | <el-dropdown class="avatar-container right-menu-item hover-effect" @command="handleCommand"> | 10 | <div class="right-menu"> |
| 11 | <div class="avatar-wrapper"> | 11 | <el-dropdown class="avatar-container right-menu-item hover-effect" @command="handleCommand"> |
| 12 | <span style="padding-right:10px">{{ name }}</span> | 12 | <div class="avatar-wrapper"> |
| 13 | <img :src="avatar + '?imageView2/1/w/80/h/80'" class="user-avatar" /> | 13 | <span style="padding-right:10px">{{ name }}</span> |
| 14 | </div> | 14 | <img :src="avatar + '?imageView2/1/w/80/h/80'" class="user-avatar" /> |
| 15 | <el-dropdown-menu slot="dropdown"> | 15 | </div> |
| 16 | <el-dropdown-item command="a">个人中心</el-dropdown-item> | 16 | <el-dropdown-menu slot="dropdown"> |
| 17 | <el-dropdown-item command="f">退出登录</el-dropdown-item> | 17 | <el-dropdown-item command="a">个人中心</el-dropdown-item> |
| 18 | </el-dropdown-menu> | 18 | <el-dropdown-item command="f">退出登录</el-dropdown-item> |
| 19 | </el-dropdown> | 19 | </el-dropdown-menu> |
| 20 | </el-dropdown> | ||
| 21 | </div> | ||
| 20 | </div> | 22 | </div> |
| 23 | <NoticeBar class="NoticeBar" :sendVal="sendVal" /> | ||
| 21 | </div> | 24 | </div> |
| 22 | </template> | 25 | </template> |
| 23 | <script> | 26 | <script> |
| 27 | import NoticeBar from '@/components/NoticeBar/index' | ||
| 24 | import { mapGetters } from 'vuex' | 28 | import { mapGetters } from 'vuex' |
| 25 | export default { | 29 | export default { |
| 30 | components: { | ||
| 31 | NoticeBar | ||
| 32 | }, | ||
| 26 | computed: { | 33 | computed: { |
| 27 | ...mapGetters(['sidebar', 'avatar', 'name']) | 34 | ...mapGetters(['sidebar', 'avatar', 'name']) |
| 28 | }, | 35 | }, |
| 29 | data () { | 36 | data () { |
| 30 | return { | 37 | return { |
| 31 | logo: require('../../image/logo.png') | 38 | logo: require('../../image/logo.png'), |
| 39 | sendVal: [ | ||
| 40 | '222222222222222222222222222222222', | ||
| 41 | '222222233333333333333333333333' | ||
| 42 | ] | ||
| 32 | } | 43 | } |
| 33 | }, | 44 | }, |
| 34 | methods: { | 45 | methods: { |
| ... | @@ -53,6 +64,16 @@ export default { | ... | @@ -53,6 +64,16 @@ export default { |
| 53 | } | 64 | } |
| 54 | </script> | 65 | </script> |
| 55 | <style lang="scss" scoped> | 66 | <style lang="scss" scoped> |
| 67 | .navbar-con { | ||
| 68 | position: relative; | ||
| 69 | } | ||
| 70 | |||
| 71 | .NoticeBar { | ||
| 72 | position: absolute; | ||
| 73 | left: 330px; | ||
| 74 | bottom: 0; | ||
| 75 | } | ||
| 76 | |||
| 56 | .el-dropdown-menu { | 77 | .el-dropdown-menu { |
| 57 | padding: 0 !important; | 78 | padding: 0 !important; |
| 58 | border: 1px solid #EBEEF5; | 79 | border: 1px solid #EBEEF5; | ... | ... |
| ... | @@ -72,6 +72,7 @@ class data extends filter { | ... | @@ -72,6 +72,7 @@ class data extends filter { |
| 72 | }, | 72 | }, |
| 73 | { | 73 | { |
| 74 | label: "操作", | 74 | label: "操作", |
| 75 | width: 80, | ||
| 75 | render: (h, scope) => { | 76 | render: (h, scope) => { |
| 76 | return <el-button type="text" icon='el-icon-view' onClick={() => { vm.handleViewClick(scope) }}>查看</el-button> | 77 | return <el-button type="text" icon='el-icon-view' onClick={() => { vm.handleViewClick(scope) }}>查看</el-button> |
| 77 | } | 78 | } | ... | ... |
-
Please register or sign in to post a comment