http://diokuz.github.io/baron/
網(wǎng)上應該有很多這種的取github上找找scroll bar
原理大概就是讓框框overflow:hidden自己做bar
minchunks這個配置項你配置不正確,這里也不是這么用的。你可以用chunks,指定你那些模塊用了data.js。
addListener搜索一下 這個沒有找到
沒太看懂/recommend/getNews和你定義的路由有什么關(guān)系
你的這個匹配不到newslist到/song/getNewsList就走:id,Songditail了
把/getNewsList放到:id前面試試
vue-router 會給你當前的router-link加上active這個className,你可以在li下使用router-link, 需要加上 linkActiveClass: 'active'
Vue 使用是 Observer 模型
少年,你問到了
Vue技術(shù)最牛的地方
新建data時候,所有的數(shù)據(jù)都被轉(zhuǎn)換成了observer,如圖:
ObServer 會對變量的修改進行監(jiān)控,原理主要是:
Object.defineProperty(Vue.prototype, "a", {
get: function () {
return xxx;
},
set: function(v) {
.... 這里是關(guān)鍵
},
enumerable: true,
configurable: true
});
當然具體實現(xiàn)比這個復雜的多的多,因為還有DOM的綁定
對其變量的修改,會反饋到任何曾經(jīng)使用過過此變量的地方
比如 如下模型:
<div id="a">{}</div>
<script>
let vm = new Vue({
el: '#a',
data () {
return {
a: 'aaa',
c: [],
};
},
computed: {
b() {
return this.a + 'bbb';
}
}
});
console.log(vm.b); // 輸出 aaabbb
vm.a = 'ccc';
console.log(vm.b); // 輸出 cccbbb
// 并且 div 也是 cccbbb
</script>
你在任意地方修改a, 不僅會影響到a,還會影響到b,這是因為Observer的聯(lián)動效果,
注意:如果不是因為Observer,而是傳統(tǒng)的JS,b 在生成之后,值就固定了,永遠等于aaabbb,而無法達到修改a,也讓b也修改的效果。
$.ajax({success: 這里}),但是需要注意的是,Array、Object之類的值,不能直接全部修改
// 直接等于其它值,是不行的
vm.c = [1, 2];
這樣會丟到數(shù)組內(nèi)層的ObServer模型,下面的做法是可以的
//這樣是可以的,因為Vue重寫了數(shù)組的一些常見操作函數(shù),讓其支持Ob
vm.c.push(3);
//或者這樣
Vue.Set(vm.c, [a, b, c]);
當然,可能有人說,這
b是函數(shù)啊,取函數(shù),肯定會重新計算,但是DOM的綁定和渲染呢,那可沒有實時去調(diào)用函數(shù),如果是使用一個setTimeout實時去對比,那豈不是非常浪費性能(即使Angular在外部對變量的修改,都需要用$scope函數(shù)觸發(fā)的對比)
所以,只要修改a,DOM那邊也是實時修改的。因為這就是Observer的功效,它會觸發(fā)所有使用本變量的地方,一起聯(lián)動
你好,還有兩個請求頭部的參數(shù),Content-Type和AccessToken怎么設(shè)置呢?
這個用css 動畫就可以解決
http://jsbin.com/lowaxebuve/1...
<!DOCTYPE html>
<html>
<head>
<title>橫向滑動</title>
<style type="text/css">
* {
padding: 0;
margin: 0;
}
/* 清除浮動 */
.clearfix:after {
content: "";
display: table;
clear: both;
}
html, body {
height: 100%;
}
body {
font-family: "Microsoft YaHei";
background: #E1E1E1;
font-weight: 300;
font-size: 15px;
color: #333;
overflow: hidden;
}
.item{
display: block;
height: 35px;
border: 1px solid #449D44;
margin: 15px;
line-height: 35px;
text-align: center;
}
</style>
</head>
<link rel="stylesheet">
<script src="http://vuejs.org/js/vue.js"></script>
<body>
<div id="app">
<button @click="loaditems">load data</button>
<div v-if="isloaded" class="item animated bounceInDown" v-for="item,index in items" :key="index" :style="{'animation-delay': index * 0.2 + 's'}">{{item.name}}</div>
</div>
</body>
<script>
new Vue({
el:'#app',
name:"test",
data () {
return {
isloaded: false,
items: []
}
},
methods: {
loaditems(){
setTimeout(()=>{
if(!this.isloaded){
this.items = [
{
name: 'tom'
},
{
name:'jerry'
},
{
name:'lily'
}
]
this.isloaded = true
} else {
this.isloaded = false
this.items = []
}
},300)
}
}
});
</script>
</html>
寫了個例子給你
performace是瀏覽器自動寫在window對象上的
所以你只需要在頁面加載完成的時候,調(diào)用window.performace.getEntries(),就能得到一個數(shù)組,其中是所有請求的耗時情況,然后從中找到你的baidu請求對象,用下面的方法就能得到請求的時間情況
// 計算加載時間
function getEntryTiming (entry) {
var t = entry;
var times = {};
// 重定向的時間
times.redirect = t.redirectEnd - t.redirectStart;
// DNS 查詢時間
times.lookupDomain = t.domainLookupEnd - t.domainLookupStart;
// 內(nèi)容加載完成的時間
times.request = t.responseEnd - t.requestStart;
// TCP 建立連接完成握手的時間
times.connect = t.connectEnd - t.connectStart;
// 掛載 entry 返回
times.name = entry.name;
times.entryType = entry.entryType;
times.initiatorType = entry.initiatorType;
times.duration = entry.duration;
return times;
}
將圖片中的改成下面的,就能夠格式化日期了。
<script th:inline="javascript" type="text/html" id="birth">
{{#
return layui.util.toDateString(d.birth.time, 'yyyy-MM-dd')
}}
</script>
你可以試下menu的onSelect事件去觸發(fā)selectMenuDown,onSelect有你想要的數(shù)據(jù)
<Menu onSelect={(item, key, selectedKeys) => this.selectMenuDown(item, key, selectedKeys)}>
</Menu>既然你的Form表單是動態(tài)變化的,所以你就不能使用TemplateDriven Form這種方式了。
所以你應該使用ReactiveForm。
大致的思想就是你需要有一個container component, 將需要綁定formControl的input抽出來變成childwidget, childwidget兩個輸入?yún)?shù)user和fmgrp。
<div nz-row *ngFor="let user of authorityList; let i = index">
<div nz-col [nzSpan]="4">
</div>
<div nz-col [nzSpan]="6" [nzValidateStatus]="'success'" nzHasFeedback>
<childwidget [user]="user" [fmgrp]="defaultForm"></childwidget>
</div>
</div>
ngOnInit() {
this.defaultForm = new FormGroup({});
}
所以childwidget就變成這樣了
@Component({
selector: 'childwidget',
template: `
<nz-input [formControl]="formCtrl">
</nz-input>
`
});
@Input() user: string;
@Input() fmgrp: FormGroup;
formCtrol: FormControl = new FormControl("");
ngOnInit() {
if (this.fmgrp) {
this.fmgrp.addControl(this.user, this.formControl);
}
}
這樣無論你有多少個input,formGroup都能添加對應額formControl。
然后你操作這個defaultForm這個變量就可以了。
理論上可以試一試,但是這樣又讓用戶多了一步長按識別小程序二維碼的動作
我想出兩種方案,
1、服務(wù)器端返回文件的時候,設(shè)置響應頭,
cache-control:no-cache
貌似是這樣,告訴瀏覽器不要緩存;
2、前端控制,核心是,如何區(qū)分代碼里修改 url 導致的刷新和用戶的刷新,代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script>
let presentTime = (new Date()).getTime(),
hrefWithoutSearch = location.protocol + '//' + location.host + location.pathname;
if (localStorage.getItem('previousHref') === null) {
localStorage.setItem('previousHref', hrefWithoutSearch + "?v=" + presentTime);
localStorage.setItem('previousAccessTime', presentTime);
location.href = hrefWithoutSearch + "?v=" + presentTime;
} else {
let interval = presentTime - parseInt(localStorage.getItem('previousAccessTime'), 10);
if (interval > 2000) {
localStorage.setItem('previousAccessTime', presentTime);
location.href = hrefWithoutSearch + "?v=" + presentTime;
}
}
</script>
</body>
</html>
原理:
所以,onbeforeunload,onunload 都無法來區(qū)分,我想到的可以區(qū)分的就是,用戶的操作
我覺得比較困難,尤其是地址欄回車按鈕和地址欄旁的刷新;所以想了另外一個妥協(xié)的辦法:
頁面每次加載,都去 localStorage 里獲取上次加載的時間 previousAccessTime,和當前時間一減,得出 interval ,假設(shè)跟 3秒 比較;
后兩點是缺點,當然可以通過其他方式去優(yōu)化,比如,
你這種動畫最好用keyframes來處理,另外就是:active在移動端有問題的。建議你查一下相關(guān)的資料,了解一下。
不可能用不了的好吧
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0" />
設(shè)計這種頁面交互,就像是在Photoshop里使用圖層一樣,通過點擊“開始吧”按鈕觸發(fā)CSS的屬性變換,從而使得Wizard steps這個層浮動出來(預設(shè)覆蓋整個頁面),具體CSS代碼可以直接參考airbnb的源代碼,比如wizard層呼出:
height: 100% !important;
width: 100% !important;
position: fixed !important;
z-index: 102 !important;
top: 0px !important;
left: 0px !important;
animation-name: keyframe_18jn58a !important;
animation-duration: 1200ms !important;
animation-timing-function: ease !important;
background: rgb(255, 255, 255) !important;學2+的最新版本,現(xiàn)在直接學angular6。
[問題基本已解決]
圖片的四個白底的角并不是由于canvas的drawImage(img,...)造成的, 也不是因為image本身不透明(png格式, 四個角的確時透明的). 而是在畫圖前, 可能默認會填充一個矩形區(qū)域, 然后才能畫image.
于是, lz采用笨方法: 畫圖前將矩形區(qū)域的長寬設(shè)成很小, 至少小于待繪制image的寬高.
最后, 這樣果然可行.
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領(lǐng)域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。