ฉันจะสร้างภาพซ้อนทับพื้นฐานใน jQuery โดยไม่มี UI ได้อย่างไร
ปลั๊กอินน้ำหนักเบาคืออะไร?
ฉันจะสร้างภาพซ้อนทับพื้นฐานใน jQuery โดยไม่มี UI ได้อย่างไร
ปลั๊กอินน้ำหนักเบาคืออะไร?
คำตอบ:
การวางซ้อนคือการวางdiv
ที่คงที่บนหน้าจอ (ไม่ว่าคุณจะเลื่อน) และมีความทึบบางอย่าง
นี่จะเป็น CSS ของคุณสำหรับความทึบของเบราว์เซอร์ข้าม 0.5:
#overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #000;
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
z-index: 10000;
}
นี่จะเป็นโค้ด jQuery ของคุณ (ไม่จำเป็นต้องใช้ UI) คุณกำลังจะสร้างองค์ประกอบใหม่ด้วย ID #overlay การสร้างและทำลาย DIV ควรเป็นสิ่งที่คุณต้องการ
var overlay = jQuery('<div id="overlay"> </div>');
overlay.appendTo(document.body)
สำหรับเหตุผลประสิทธิภาพคุณอาจต้องการที่จะมี DIV ที่ซ่อนอยู่และการตั้งค่าการแสดงผลเพื่อป้องกันและไม่มีใครตามที่คุณต้องการหรือไม่
หวังว่าจะช่วยได้!
แก้ไข:ในฐานะที่เป็น @Vitaly ให้ดีอย่าลืมตรวจสอบ DocType ของคุณ อ่านเพิ่มเติมเกี่ยวกับความคิดเห็นเกี่ยวกับการค้นพบของเขา ..
background-image: url('semi-transparent-pixel.png');
นี่เป็นวิธีแก้ปัญหาเฉพาะจาวาสคริปต์ง่ายๆ
function displayOverlay(text) {
$("<table id='overlay'><tbody><tr><td>" + text + "</td></tr></tbody></table>").css({
"position": "fixed",
"top": 0,
"left": 0,
"width": "100%",
"height": "100%",
"background-color": "rgba(0,0,0,.5)",
"z-index": 10000,
"vertical-align": "middle",
"text-align": "center",
"color": "#fff",
"font-size": "30px",
"font-weight": "bold",
"cursor": "wait"
}).appendTo("body");
}
function removeOverlay() {
$("#overlay").remove();
}
การสาธิต:
http://jsfiddle.net/UziTech/9g0pko97/
ส่วนสำคัญ:
<table>
? มันเป็นปี 1990 หรือไม่?
นี่คือเวอร์ชันที่ห่อหุ้มอย่างสมบูรณ์ซึ่งเพิ่มการวางซ้อน (รวมถึงปุ่มแชร์) ให้กับองค์ประกอบ IMG ใด ๆ ที่ data-photo-overlay = 'true
JSFiddle http://jsfiddle.net/wloescher/7y6UX/19/
HTML
<img id="my-photo-id" src="http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png" alt="Photo" data-photo-overlay="true" />
CSS
#photoOverlay {
background: #ccc;
background: rgba(0, 0, 0, .5);
display: none;
height: 50px;
left: 0;
position: absolute;
text-align: center;
top: 0;
width: 50px;
z-index: 1000;
}
#photoOverlayShare {
background: #fff;
border: solid 3px #ccc;
color: #ff6a00;
cursor: pointer;
display: inline-block;
font-size: 14px;
margin-left: auto;
margin: 15px;
padding: 5px;
position: absolute;
left: calc(100% - 100px);
text-transform: uppercase;
width: 50px;
}
JavaScript
(function () {
// Add photo overlay hover behavior to selected images
$("img[data-photo-overlay='true']").mouseenter(showPhotoOverlay);
// Create photo overlay elements
var _isPhotoOverlayDisplayed = false;
var _photoId;
var _photoOverlay = $("<div id='photoOverlay'></div>");
var _photoOverlayShareButton = $("<div id='photoOverlayShare'>Share</div>");
// Add photo overlay events
_photoOverlay.mouseleave(hidePhotoOverlay);
_photoOverlayShareButton.click(sharePhoto);
// Add photo overlay elements to document
_photoOverlay.append(_photoOverlayShareButton);
_photoOverlay.appendTo(document.body);
// Show photo overlay
function showPhotoOverlay(e) {
// Get sender
var sender = $(e.target || e.srcElement);
// Check to see if overlay is already displayed
if (!_isPhotoOverlayDisplayed) {
// Set overlay properties based on sender
_photoOverlay.width(sender.width());
_photoOverlay.height(sender.height());
// Position overlay on top of photo
if (sender[0].x) {
_photoOverlay.css("left", sender[0].x + "px");
_photoOverlay.css("top", sender[0].y) + "px";
}
else {
// Handle IE incompatibility
_photoOverlay.css("left", sender.offset().left);
_photoOverlay.css("top", sender.offset().top);
}
// Get photo Id
_photoId = sender.attr("id");
// Show overlay
_photoOverlay.animate({ opacity: "toggle" });
_isPhotoOverlayDisplayed = true;
}
}
// Hide photo overlay
function hidePhotoOverlay(e) {
if (_isPhotoOverlayDisplayed) {
_photoOverlay.animate({ opacity: "toggle" });
_isPhotoOverlayDisplayed = false;
}
}
// Share photo
function sharePhoto() {
alert("TODO: Share photo. [PhotoId = " + _photoId + "]");
}
}
)();
หากคุณใช้ jquery อยู่แล้วฉันไม่เห็นว่าทำไมคุณถึงไม่สามารถใช้ปลั๊กอินโอเวอร์เลย์ที่มีน้ำหนักเบาได้ คนอื่น ๆ ก็เขียน jquery ดีๆแล้วทำไมต้องประดิษฐ์วงล้อขึ้นมาใหม่?
โปรดตรวจสอบปลั๊กอิน jQuery นี้
ด้วยวิธีนี้คุณสามารถซ้อนทับหน้าหรือองค์ประกอบทั้งหมดได้ดีสำหรับฉัน
ตัวอย่าง: บล็อก div:
$('div.test').block({ message: null });
บล็อกหน้า:
$.blockUI({ message: '<h1><img src="busy.gif" /> Just a moment...</h1>' });
หวังว่าจะช่วยใครบางคน
ทักทาย
โดยการวางซ้อนคุณหมายถึงเนื้อหาที่ทับซ้อน / ครอบคลุมส่วนที่เหลือของหน้าหรือไม่ ใน HTML คุณสามารถทำได้โดยใช้ div ที่ใช้การวางตำแหน่งแบบสัมบูรณ์หรือคงที่ หากจำเป็นต้องสร้างแบบไดนามิก jQuery ก็สามารถสร้าง div ด้วยสไตล์ตำแหน่งที่ตั้งไว้อย่างเหมาะสม
คุณตั้งใจจะทำอะไรกับภาพซ้อนทับ? หากเป็นแบบคงที่ให้พูดว่ากล่องธรรมดาที่ซ้อนทับเนื้อหาบางส่วนเพียงแค่ใช้การกำหนดตำแหน่งที่แน่นอนกับ CSS ถ้าเป็นแบบไดนามิก (ฉันเชื่อว่าสิ่งนี้เรียกว่าไลท์บ็อกซ์) คุณสามารถเขียนโค้ด jQuery ที่ปรับเปลี่ยน CSS เพื่อแสดง / ซ่อนโอเวอร์เลย์ตามต้องการ