时间对象
先定义一个与时间有关的对象,将与时间有关的函数封装进去
1 | var Time = { |
自定义指令v-time
1 | Vue.directive('time', { |
定时器el.__timeout__每分钟触发一次,在unbind钩子中清除
html代码
1 | <div id="app"> |
嗨~
先定义一个与时间有关的对象,将与时间有关的函数封装进去
1 | var Time = { |
1 | Vue.directive('time', { |
定时器el.__timeout__每分钟触发一次,在unbind钩子中清除
1 | <div id="app"> |
现在开发人员不容易呀,产品、运营天天各种需求,哎这个顶导要在页面往上滑的时候缓缓的隐藏,下拉的时候在缓缓的显示~ 哎这个图片要自适应的呀,就是那种不够的话补黑边的呀~ 哎视频的进度条要自定义的呀,原生的那个多丑呀~ 哎。。。
唉,怎么办呢,没有办法呀,使劲磕呗,那今天的话题我们就来说说IOS中video全屏的问题,有需要的朋友可以参考下
controls
: 显示播放控件;controls属性规定浏览器应该为视频提供播放控件,换句话说,只有写了这个属性才会有播放控件,不写的话默认是没有的,所有如果要自定义播放控件就不需要写controls属性
写法:1
<video controls src='1.mp4'></video>
autoplay
:自动播放;指定后,视频会马上自动开始播放,不会停下来等着数据载入结束
写法:1
<video autoplay src='1.mp4'></video>
playsinline
:取消全屏;只需在video上添加该属性,便可使视频播放时局域播放,不脱离文档流,但是这个属性需要APP支持,在APP开发中设置UIwebview 的allowsInlineMediaPlayback = YES webview.allowsInlineMediaPlayback = YES才能生效
写法:1
<video webkit-playsinline="true" playsinline="playsinline" src='1.mp4'></video>
众所周知,IOS是不支持全屏API的,于是requesrFullScreen事件对于video全屏是不起作用的,但是IOS9+对于video标签有一个很重要的属性,那就是playsinline
,这个属性去掉之后视频就可以全屏,但不是直接生效,而是下次播放的时候才可以,于是我们需要先把视频短暂的暂停一下,在播放就可以了,具体实现方法:1
2
3
4video.pause()
video.removeAttribute('playsinline')
video.removeAttribute('webkit-playsinline')
video.play()
这个仅对IOS中的全屏有用,如果兼容Android需要使用requestFullScreen
方法,具体实现方法:1
2<button onclick="fullscreenFn()">全屏</button>
<video width="400" autoplay="" webkit-playsinline="true" playsinline="playsinline" src='1.mp4' id="video"></video>
1 | // 浏览器前缀判断 |
什么东西在我们的生活和工作当中可有可无,但是有了它立马会提升一个档次呀~ ———— 那就是甘特图Gantt chart,就是下面这个东西啦啦啦
1 | gantt |
当当当当~
数字格式化一 e.g. 23422039->2342.2W
1 | /** |
数字格式化二 e.g. 23232222->23,232,222
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 /**
* 千位符数字格式化23,232,222
* @param {number} num 需要格式化的数字
* @param {int} precision 保留小数位
* @param {String} separator 分隔符
*/
function CounFormat2 (num, precision, separator) {
var parts
if (!isNaN(parseFloat(num)) && isFinite(num)) {
num = Number(num)
num = (typeof precision !== 'undefined' ? num.toFixed(precision) : num).toString()
parts = num.split('.')
parts[0] = parts[0].toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1' + (separator || ','))
return parts.join('.')
}
return NaN
}
时间格式化 e.g. 1245278300->2009-6-18 06:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 /**
* 时间格式化 2018-09-09 12:02:22
* @param {number} timespan 时间戳
*/
function formatMsgTime (timespan) {
timespan = timespan * 1000
var dateTime = new Date(timespan)
var year = dateTime.getFullYear()
var month = dateTime.getMonth() + 1
var day = dateTime.getDate()
var hour = dateTime.getHours() ? (dateTime.getHours() < 10 ? '0' + dateTime.getHours() : dateTime.getHours()) : '00'
var minute = dateTime.getMinutes() ? (dateTime.getMinutes() < 10 ? '0' + dateTime.getMinutes() : dateTime.getMinutes()) : '00'
// var second = dateTime.getSeconds()
var now = new Date()
// typescript转换写法
var nowNew = now.getTime()
// var nowNew = Date.parse(now.toDateString())
var milliseconds = 0
var timeSpanStr
milliseconds = nowNew - timespan
if (milliseconds <= 1000 * 60 * 1) {
timeSpanStr = '刚刚'
} else if (1000 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60) {
timeSpanStr = Math.round((milliseconds / (1000 * 60))) + '分钟前'
} else if (1000 * 60 * 60 * 1 < milliseconds && milliseconds <= 1000 * 60 * 60 * 24) {
timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60)) + '小时前'
} else if (1000 * 60 * 60 * 24 < milliseconds && milliseconds <= 1000 * 60 * 60 * 24 * 15) {
timeSpanStr = Math.round(milliseconds / (1000 * 60 * 60 * 24)) + '天前'
} else if (milliseconds > 1000 * 60 * 60 * 24 * 15 && year === now.getFullYear()) {
timeSpanStr = month + '-' + day + ' ' + hour + ':' + minute
} else {
timeSpanStr = year + '-' + month + '-' + day + ' ' + hour + ':' + minute
}
return timeSpanStr
}
1 | /** |
1 | /** |
1 | /** |
1 | /** |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
width: 100%;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
/* vue打包会丢失box-orient属性,需要特殊处理 */
/*! autoprefixer: off */
-webkit-box-orient: vertical;
/* autoprefixer: on */
1
2
3
4
5
6
7
8
9
10
11
12
::-webkit-input-placeholder { /* WebKit browsers */
color: #999;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color: #999;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #999;
}
:-ms-input-placeholder { /* Internet Explorer 10+ */
color: #999;
}
1
2
3
4
5
6
7
{
width: 0px;
height: 0;
border: .11rem solid transparent;
border-top: .15rem solid #8D3A3A;
display: block;
}
起源就是领导说要做一套可以无缝唤起客户端的系统,如果完不成就要用第三方的系统,但是我们已经完成了scheme(原始唤起码)+Universal Links(通用链接),只剩下载后通过设备指纹识别唤起客户端指定页,我们能妥协吗,当然不行!
1 | 什么是通用链接(Universal Links)? |
协议形式为https://app.yixia.com,这样的唤起码浏览器和APP都会识别,跳转方式为:
没安装的情况下,点击任意唤起链接,即种植当前链接到服务端,8分钟内下载完成并唤起之后即可自动跳转到已种植的站内页面(仅限于下载后第一次启动)
1 |
|
1 | android: |