• امروز : چهارشنبه, ۵ اردیبهشت , ۱۴۰۳
  • برابر با : Wednesday - 24 April - 2024
اخبار امروز : 0
0
6

آموزش جاوا اسکریپت | افکت ذره‌بین و ساخت گالری عکس

  • کد خبر : 6751
  • 01 اسفند 1397 - 0:08
آموزش جاوا اسکریپت | افکت ذره‌بین و ساخت گالری عکس

در این آموزش با استفاده از زبان جاوا اسکریپت، قصد ساخت و طراحی کتابخانه ذره‌بین را داریم تا در هنگام قرارگیری نشان‌گر ماوس بر روی نقطه مشخصی از عکس، افکت بزرگنمایی اعمال شود….

d8a2d985d988d8b2d8b4 d8acd8a7d988d8a7 d8a7d8b3daa9d8b1db8cd9bed8aa d8a7d981daa9d8aa d8b0d8b1d987e2808cd8a8db8cd986 d988 d8b3d8a7d8ae 5c6c6666b3ab3

در این آموزش با استفاده از زبان جاوا اسکریپت، قصد ساخت و طراحی کتابخانه ذره‌بین را داریم تا در هنگام قرارگیری نشان‌گر ماوس بر روی نقطه مشخصی از عکس، افکت بزرگنمایی اعمال شود. ممکن است مشابه این کتابخانه را زیاد دیده باشید اما اینکه خود شما به عنوان یک برنامه‌نویس قادر به ساخت چنین افکتی باشید، بسیار حائز اهمیت است

توجه داشته باشید که تمام قسمت‌های این کتابخانه را از صفر و بدون استفاده از جی‌کوئری (jQuery) و یا دیگر تعلقات جاوا اسکریپت می‌سازیم، پس طبیعتا بسیار سبک و کم‌حجم خواهد بود.

پیش‌نمایش گالریدانلود گالری

طرح‌ریزی کتابخانه

معمولا سایت‌های تجاری همچون eBay و Amazon جزو بزرگ‌ترین طرفداران افکت ذره‌بین هستند. افکت ذره‌بین معمولا شامل گروهی از عکس‌های کوچک است که امکان بزرگنمایی و مشاهده جزییات آن‌ها در حالت hover (قرارگیری ماوس روی عکس) فراهم می‌شود.

برای حفظ سادگی این آموزش، تنها قابلیت‌های اصلی را به این کتابخانه اضافه خواهیم کرد. از این رو، در کنار فایل html، تنها به یک فایل جاوا اسکریپت برای تنظیم عملکرد کتابخانه و همچنین به یک فایل css برای زیبا‌سازی آن نیاز داریم.

طراحی کتابخانه

قبل از اینکه ساخت کتابخانه را شروع کنیم، نگاهی به عملکرد آن می‌اندازیم، زیرا ایده‌پردازی و جمع‌بندی قبل از شروع کار باعث می‌شود تا کدنویسی راحت‌تری داشته باشیم.

از آنجایی که قرار است که این گالری را در قالب یک پلاگین بسازیم و کاربران بتوانند بدون مشکل از آن استفاده کنند، باید در همین شروع کار، یک پیکربندی منظم از HTML بسازیم. این قسمت شامل یک div برای قرارگیری عکس‌ها و همچنین یک div خالی برای تنظیم بزرگنمایی است. همچنین خصوصیات id و class را نیز اضافه کرده‌ایم.

div id="my-gallery" class="vanilla-zoom">
    div class="sidebar">
        img src="images/image-1.jpg" class="small-preview">
        img src="images/image-2.jpg" class="small-preview">
        img src="images/image-3.jpg" class="small-preview">
    div>
    div class="zoomed-image">div>
div>

کاربران در این قسمت می‌توانند هر تعداد عکس که نیاز دارند را به طرح بالا بیافزایند. توجه داشته باشید که هر عکس به کلاس small-preview. پیوند خورده است و یک div خالی نیز با کلاس zoomed-image. در پایین المنت اصلی وجود دارد.

مطالب خواندنی:  5 اشتباه بزرگ در آرایش

عملکرد این کتابخانه کاملا وابسته به جاوا اسکریپت است اما به هر حال، مقداری css هم کار را زیبا می‌کند. امکان افزودن مستقیم فایل css به html با دستور زیر وجود دارد :

link rel="stylesheet" href="vanilla-zoom/vanilla-zoom.css">

حال که طرح پایه‌ای کتابخانه آماده شده است، به مقداردهی اولیه جاوا اسکریپت در فایل html می‌پردازیم.

script src="vanilla-zoom/vanilla-zoom.js">script>
script>
    vanillaZoom.init('#my-gallery');
script>

افزودن فایل js به کتابخانه باعث می‌شود تا آبجکت vanillaZoom به صورت سراسری در دسترس باشد. این آبجکت تنها شامل یک متد برای مقداردهی اولیه پلاگین است و یک مقدار را به عنوان آدرس id گالری دریافت می‌کند. به این صورت می‌توانیم چندین گالری مستقل را در یک صفحه مدیریت کنیم.

توسعه کتابخانه

زمانی که می‌خواهیم یک کتابخانه front-end جاوا اسکریپت را طراحی کنیم، باید مطمئن شویم که رابط برنامه‌نویسی کاربردی (API) را به درستی ثبت کرده‌ایم. روش‌های مختلفی برای این کار وجود دارد که آسان‌ترین آن‌ها، استفاده از روش زیر است:

(function(window) {
  function define_library() {
    
    var vanillaZoom = {};
    vanillaZoom.init = function(galleryId) {
      
    }
    return vanillaZoom;
  }

  
  if(typeof(vanillaZoom) === 'undefined') {
    window.vanillaZoom = define_library();
  }
  else{
    console.log("Library already defined.");
  }
})(window);

قطعه کد بالا درون یک تابع خودفراخوان (self executing) پیچیده شده است. در این روش، کتابخانه به طور خودکار ثبت می‌شود و آبجکت vanillaZoom با تمام متدهای خود در دسترس کاربران قرار خواهد گرفت.

همانطور که در بالا گفتیم، کتابخانه تنها یک متد (vanillaZoom.init(galleryId خواهد داشت و وظیفه آن انتخاب المنت‌های DOM گالری و افزودن event به آن‌هاست.

ابتدا باید در صورت وجود المنت‌های مورد نظر، آن‌ها را انتخاب کنیم. همانطور که گفته شد، جی‌کوئری در این آموزش کاربردی ندارد، پس باید به استفاده از روش‌های جاوا اسکریپت بومی و کار با DOM تکیه کنیم.

var container = document.querySelector(el);

if(!container) {
    console.error('Please specify the correct class of your gallery.');
    return;
}

var firstSmallImage = container.querySelector('.small-preview');
var zoomedImage = container.querySelector('.zoomed-image');

if(!zoomedImage) {
    console.error('Please add a .zoomed-image element to your gallery.');
    return;
}

if(!firstSmallImage) {
    console.error('Please add images with the .small-preview class to your gallery.');
    return;
}
else {
    
    zoomedImage.style.backgroundImage = 'url('+ firstSmallImage.src +')';
}

توجه داشته باشید که در خط آخر، منبع عکس مورد نظر را دریافت کرده و درون پس‌زمینه (background) المنت بزرگنمایی قرار می‌دهیم. این عمل زمانی رخ می‌دهد که (vanillaZoom.init(galleryId خوانده شود تا از خالی نبودن گالری اطمینان حاصل کنیم.

مطالب خواندنی:  مخترع پیکسل درگذشت

همین عمل را برای کلیک روی پیش‌نمایش‌ها نیز تکرار می‌کنیم. بدین صورت کاربران قادر خواهند بود تا عکس مورد نظر خود را برای بزرگنمایی انتخاب کنند.

container.addEventListener("click", function (event) {
  var elem = event.target;

  if (elem.classList.contains("small-preview")) {
      zoomedImage.style.backgroundImage = 'url('+ elem.src +')';
  }
});

عکسی که در معرض بزرگنمایی قرار گیرد، شامل چندین event خواهد بود. اولین آن زمانی فعال می‌شود که نشان‌گر ماوس روی عکس قرار گیرد و باعث افزایش اندازه پس‌زمینه و بزرگنمایی عکس خواهد شد.

zoomedImage.addEventListener('mouseenter', function(e) {
    this.style.backgroundSize = "۲۵۰%"; 
}, false);

از آنجایی که اندازه عکس بزرگ شده است. کاملا درون div جا نمی‌شود و تنها مقداری از آن به نمایش در خواهد آمد. حال از کاربر می‌خواهیم تا مکان بزرگنمایی عکس را انتخاب کند. از این رو یک event دیگر برای رهگیری mousemove اضافه می‌کنیم تا با استفاده از آن موقعیت پس‌زمینه را تغییر دهیم.

zoomedImage.addEventListener('mousemove', function(e) {

  
  var dimentions = this.getBoundingClientRect();

  
  var x = e.clientX - dimentions.left;
  var y = e.clientY - dimentions.top;

  
  var xpercent = Math.round(۱۰۰ / (dimentions.width / x));
  var ypercent = Math.round(۱۰۰ / (dimentions.height / y));

  
  this.style.backgroundPosition = xpercent+'% ' + ypercent+'%';

}, false);

زمانی که نشان‌گر ماوس از عکس مورد نظر خارج شود، باید به حالت پیش‌فرض برگردیم. این عمل به راحتی و با برگرداندن اندازه پس‌زمینه به حالت cover و موقعیت پس‌زمینه به center انجام می‌شود.

zoomedImage.addEventListener('mouseleave', function(e) {
    this.style.backgroundSize = "cover"; 
    this.style.backgroundPosition = "center"; 
}, false);

و با این قطعه کد، کار ما تمام می‌شود.

پشتیبانی مرورگرها

این کتابخانه در تمام مروگرهای امروزی دسکتاپ به خوبی عمل می‌کند. البته ممکن است بعضی از خصوصیات flexbox در css عملکرد خوبی در نسخه‌های قدیمی مرورگر IE نداشته باشند.

مطالب خواندنی:  لوازم آرایش ضروری برای خانم‌ها

متأسفانه افکت بزرگنمایی در دستگاه‌های لمسی به دلیل محدودیت صفحه‌نمایش و عدم وجود نشان‌گر، کاربرد خوبی نخواهد داشت. از این رو بهتر است شخصی‌سازی‌های لازم را در نسخه گوشی‌های هوشمند انجام دهید. البته لازم به ذکر است که در کتابخانه بالا، افکت بزرگنمایی برای گوشی‌های هوشمند غیرفعال شده است.

منبع:tech.gamefa.com

لینک کوتاه : https://www.greenbeautymag.com/?p=6751

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.