以下是代碼片段
使用的JS本地預覽圖片,上傳后加載到預先寫好的DIV中,然后圖片加載完成后后續(xù)函數(shù)彈出的提示 很快背覆蓋
甚至其他功能彈出的提示也并不能使用,困惑很久,求解答。
function PreviewImage(divImage, upload) {
if (checkPic()) {
try {
//console.log(upload.files[0]);
var imgPath = getObjectURL(upload.files[0]);
// $(".divImage").css("background","url(imgPath)")
document.getElementById(divImage).innerHTML = "<img id='imgPreview' class='bgimg1' src='" + imgPath + "' width='" + '100%' + "' height='" + '100%' + "'/>";
$(".menu").hide();
$(".menuswitch1").removeClass('menuswitch1').addClass('menuswitch');
var appElement = document.querySelector('[ng-controller=screenCtrl]');
var $scope = angular.element(appElement).scope();
$(".success_text").html("更改背景圖片成功");
$scope.$apply(function () {
$scope.success_display = false;
})
setTimeout(function () {
$scope.$apply(function () {
$scope.success_display = true;
})
}, 2000);
} catch (e) {
alert("無法預覽圖片");
}
}
}把jQ的部分改了改,字符串的地方看的腦仁疼。。。Angular的部分沒動。
function PreviewImage(divImage, upload) {
if (checkPic()) {
var imgPath = getObjectURL(upload.files[0]);
$('<img>', {
"class": 'bgimg1',
id: 'imgPreview',
css: {
width: '100%',
height: '100%'
}
}).appendTo('#divImage');
$('.menu').hide();
$('.menuswitch1')
.toggleClass('menuswitch1')
.toggleClass('menuswitch');
var appElement = $('[ng-controller="screenCtrl"]')[0];
var $scope = angular.element(appElement).scope();
$('.success_text').html('更改背景圖片成功');
$scope.$apply(function () {
$scope.success_display = false;
})
setTimeout(function () {
$scope.$apply(function () {
$scope.success_display = true;
})
}, 2000);
}
}
另外,
根據(jù)熊貓桑前輩的答案,我去菜查了一下,發(fā)現(xiàn)一篇博文寫的很好。http://blog.163.com/xiaopengy...
大意是說jquery的加dom方法比js的更優(yōu)
以下是原文。
看一篇介紹jQuery的資料,覺得說得很好,就摘抄下來了。因為我經(jīng)常犯這種錯誤。
1.錯誤的編程方法
我們經(jīng)常使用javascript動態(tài)的創(chuàng)建元素, 有很多程序員通過直接更改某一個容器的HTML內(nèi)容.比如:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>動態(tài)創(chuàng)建對象</title>
</head>
<body>
<div id="testDiv">測試圖層</div>
<script type="text/javascript">
document.getElementById("testDiv").innerHTML = "<div style="border:solid 1px #FF0000">動態(tài)創(chuàng)建的div</div>";
</script>
</body>
</html>
上面的示例中我通過修改testDiv的內(nèi)容,在頁面上動態(tài)的添加了一個div元素. 但是請牢記,這是錯誤的做法!
錯誤的原因:
(1) 在頁面加載時改變了頁面的結(jié)構. 在IE6中如果網(wǎng)絡變慢或者頁面內(nèi)容太大就會出現(xiàn)"終止操作"的錯誤. 也就是說"永遠不要在頁面加載時改變頁面的Dom模型".
(2) 使用修改HTML內(nèi)容添加元素, 不符合Dom標準. 在實際工作中也碰到過使用這種方法修改內(nèi)容后, 某些瀏覽器中并不能立刻顯示添加的元素, 因為不同瀏覽器的顯示引擎是不同的. 但是如果我們使用Dom的CreateElement創(chuàng)建對象, 在所有的瀏覽器中幾乎都可以. 但是在jQuery中如果傳入的而是一個完整的HTML字符串, 內(nèi)部也是使用innerHTML. 所以也不是完全否定innerHTML函數(shù)的使用.
所以從現(xiàn)在開始請摒棄這種舊知識, 使用下面介紹的正確方法編程.
2.創(chuàng)建新的元素
下面介紹兩種正確的創(chuàng)建元素的方式.
(1)使用HTML DOM創(chuàng)建元素
什么是 DOM?
通過 JavaScript,您可以重構整個 HTML 文檔。您可以添加、移除、改變或重排頁面上的項目。
要改變頁面的某個東西,JavaScript 就需要對 HTML 文檔中所有元素進行訪問的入口。這個入口,連同對 HTML 元素進行添加、移動、改變或移除的方法和屬性,都是通過文檔對象模型來獲得的(DOM)。
在 1998 年,W3C 發(fā)布了第一級的 DOM 規(guī)范。這個規(guī)范允許訪問和操作 HTML 頁面中的每一個單獨的元素。
所有的瀏覽器都執(zhí)行了這個標準,因此,DOM 的兼容性問題也幾乎難覓蹤影了。
DOM 可被 JavaScript 用來讀取、改變 HTML、XHTML 以及 XML 文檔。
DOM 被分為不同的部分(核心、XML及HTML)和級別(DOM Level 1/2/3):
Core DOM
定義了一套標準的針對任何結(jié)構化文檔的對象
XML DOM
定義了一套標準的針對 XML 文檔的對象
HTML DOM
定義了一套標準的針對 HTML 文檔的對象。
關于使用HTML DOM創(chuàng)建元素本文不做詳細介紹, 下面舉一個簡單的例子:
//使用Dom標準創(chuàng)建元素
var select = document.createElement("select");
select.options[0] = new Option("加載項1", "value1");
select.options[1] = new Option("加載項2", "value2");
select.size = "2";
var object = testDiv.appendChild(select);
通過使用 document.createElement 方法我們可以創(chuàng)建Dom元素, 然后通過appendChild方法為添加到指定對象上.
(2) 使用jQuery函數(shù)創(chuàng)建元素
在jQuery中創(chuàng)建對象更加簡單, 比如創(chuàng)建一個Div元素:
$("<div style="border:solid 1px #FF0000">動態(tài)創(chuàng)建的div</div>")
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/white-space: pre;/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
我們主要使用jQuery核心類庫中的一個方法:
jQuery( html, ownerDocument )
Returns: jQuery
根據(jù)HTML原始字符串動態(tài)創(chuàng)建Dom元素.
其中html參數(shù)是一個HTML字符串, 在jQuery1.3.2中對此函數(shù)做了改進:
當HTML字符串是沒有屬性的元素是, 內(nèi)部使用document.createElement創(chuàng)建元素, 比如:
//jQuery內(nèi)部使用document.createElement創(chuàng)建元素:
$("<div/>").css("border","solid 1px #FF0000").html("動態(tài)創(chuàng)建的div").appendTo(testDiv);
否則使用innerHTML方法創(chuàng)建元素:
//jQuery內(nèi)部使用innerHTML創(chuàng)建元素:
$("<div style="border:solid 1px #FF0000">動態(tài)創(chuàng)建的div</div>").appendTo(testDiv);
3.將元素添加到對象上
我們可以使用上面兩種方式創(chuàng)建一個而元素, 但是上面已經(jīng)提到一定不要在頁面加載時就改變頁面的DOM結(jié)構, 比如添加一個元素. 正確的做法是在頁面加載完畢后添加或刪除元素.
傳統(tǒng)上, 使用window.onload完成上述目的:
//DOM加載完畢后添加元素
//傳統(tǒng)方法
window.onload = function() { testDiv.innerHTML = "<div style="border:solid 1px #FF0000">動態(tài)創(chuàng)建的div</div>"; }
雖然能夠在DOM完整加載后, 在添加新的元素, 但是不幸的是瀏覽器執(zhí)行window.onload函數(shù)不僅僅是在構建完DOM樹之后, 也是在所有圖像和其他外部資源完整的加載并且在瀏覽器窗口顯示完畢之后. 所以如果某個圖片或者其他資源加載很長時間, 訪問者就會看到一個不完整的頁面, 甚至在圖片加載之前就執(zhí)行了需要依賴動態(tài)添加的元素的腳本而導致腳本錯誤.
解決辦法就是等DOM被解析后, 在圖像和外部資源加載之前執(zhí)行我們的函數(shù).在jQuery中讓這一實現(xiàn)變得可行:
//jQuery 使用動態(tài)創(chuàng)建的$(document).ready(function)方法
$(document).ready(
function() { testDiv.innerHTML = "<div style="border:solid 1px #FF0000">使用動態(tài)創(chuàng)建的$(document).ready(function)方法</div>"; }
);
或者使用簡便語法:
//jQuery 使用$(function)方法
$(
function() { testDiv.innerHTML += "<div style="border:solid 1px #FF0000">使用$(function)方法</div>"; }
);
使用$()將我們的函數(shù)包裝起來即可. 而且可以在一個頁面綁定多個函數(shù), 如果使用傳統(tǒng)的window.onload則只能調(diào)用一個函數(shù).
所以請大家將修改DOM的函數(shù)使用此方法調(diào)用. 另外還要注意document.createElement和innerHTML的區(qū)別. 如果可以請盡量使用document.createElement和$("<div/>")的形式創(chuàng)建對象.
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。