Разработка сайта по составлению комплектации компьютера

Создание удобного сайта, где можно заказать все нужные устройства для сборки компьютера. Реализация методики тестирования программного продукта. Отладка программы. Модификация кода программы с целью улучшения ее эффективности. Руководство пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.03.2022
Размер файла 3,5 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)»

Московский техникум космического приборостроения

Специальность: 09.02.05 Прикладная информатика

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по теме:

Разработка сайта по составлению комплектации компьютера

Москва 2021

«Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)»

Московский техникум космического приборостроения

УТВЕРЖДАЮ

Председатель ПЦК спец. 09.02.03

Н.А. Жилкина

«___» ________________2019 г.

ЗАДАНИЕ

на выполнение курсового проекта

по профессиональному модулю «МДК 03.01 СиППООН»

Студент Мазаев Г.Ю. ТИ-71

График выполнения работы: 25% к 4 нед., 50% к 8 нед., 75% к 12 нед., 100% к 15 нед.

1 Тема курсового проекта

Разработка сайта по составлению комплектации компьютера____________________

2 Техническое задание

Создать сайт, на котором происходит выполнение сборки компьютера и его приобретение______________________________________

3 Оформление курсового проекта

3.1 Расчетно-пояснительная записка на____листах формата А4.

3.2 Перечень графического материала КП (плакаты, схемы, чертежи и т.п.) - схемы алгоритма

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

1. Постановка задачи

2. Структура сайта

3. Отладка программы

4. Оптимизация программы

5. Тестирование программы

6. Руководство пользователя

ЗАКЛЮЧЕНИЕ

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

Листинг

ВВЕДЕНИЕ

На сегодняшний день у каждого в доме существует тот или иной компьютер. Будь то ПК, ноутбук, смартфон. Без этого всего невозможно представить нашу современную жизнь. Фотографии, заметки, часы, календари, социальные сети: можно сказать, что вся наша жизнь уже записана и оцифрована.

Мой курсовой проект посвящен комплектации компьютера, поэтому в дальнейшем я буду говорить о ПК.

Многие могли сталкиваться с проблемой, когда покупать готовый, собранный ПК намного дороже, ежели его собирать самому, или нужно обновить (заменить) один из девайсов, но если проблем с внешними устройствами не наблюдается практически никаких, то вот с внутренними могут возникнуть сложности. У процессора и материнской платы могут быть разные сокеты, какая-то часть новых внутренних устройств не будет поддерживать старые, или же просто банально блок питания не сможет выдержать систему. Таких проблем можно описать очень много.

Поэтому мною было принято решение создать удобный сайт, где можно понять или же сразу заказать все нужные устройства.

сайт сборка компьютер тестирование программный

1. Постановка задачи

Целью разработки курсового проекта является разработка сайта по составлению комплектации компьютера. Реализовать методику тестирования программного продукта.

2. Структура сайта

jQuery

bootstrap.js

bootstrap.min.js

jquery-1.11.2.min.js

modernizr-2.8.3-respond-1.4.2.min.js

npm.js

datepicker.js

main.js

plugins.js;

CSS

bootstrap.css

bootstrap.min.css

bootstrap-theme.css

bootstrap-theme.min.css

fontAwesome.css

light-box.css

templatemo-main.css

HTML

Index.html

3. Отладка программы

Отладка программы представляет собой процесс локализации и исправления ошибок. Локализацией называют процесс определения оператора программы, выполнение которого вызвало нарушение нормального вычислительного процесса. Для исправления ошибки необходимо определить ее причину, то есть определить оператор или фрагмент, содержащий ошибку. Отладка программы занимает значительную часть рабочего времени программиста, нередко большую, чем составление программы. Практически любая программа перед началом отладки содержит как минимум одну ошибку.

В соответствии с этапом обработки, на котором проявляются ошибки, различают следующие виды ошибок:

1) синтаксические ошибки (ошибки, обнаруживаемые компилятором при выполнении синтаксического и частично семантического анализа);

2) ошибки компоновки (ошибки, обнаруживаемые компоновщиком при объединении модулей программы);

3) ошибки выполнения (ошибки, обнаруживаемые ОС, аппаратными средствами или пользователем при выполнении программы).

Сайт содержал некоторые несущественные визуальные ошибки, которые были исправлены сиюминутно. Также было несколько пересборок для правильного отображения информации потому, что каждый раз приходило что-то новое на ум.

4. Оптимизация программы

Оптимизация программы - это процесс модификации кода программы с целью улучшения ее эффективности.

Основной задачей программирования является создание правильных, а не эффективных программ. Зачастую для повышения производительности программ большую значимость имеют такие факторы, как:

- четко выработанные требования к программе до начала ее разработки;

- хорошая архитектура программы;

- хорошо спроектированные модули;

- правильно выбранный компилятор со встроенными средствами оптимизации.

Ввиду данных факторов основной целью разработки являлось создание правильной, хорошо спроектированной программы.

В большинстве случаев к оптимизации следует приступать только после того, как программа создана и выдает требуемые результаты. В противном случае можно получить не просто неудобочитаемый код и неработающую программу, но еще и неоптимизированное решение. Однако неизвестно, насколько эффективной будет программа, оптимизированная после ее разработки, поэтому определять требования к эффективности следует на стадии проектирования.

Несмотря на вышеперечисленные факты, оптимизация оказывается очень полезной, когда программа работает правильно. Производя небольшие изменения в некоторых фрагментах кода, называемых критическими областями, оптимизация помогает повысить эффективность программы в несколько раз.

Так как современные ЭВМ отличаются высоким быстродействием, то оптимизация отдельных, редко встречающихся, операторов является бесполезной тратой времени. Однако повышение эффективности на мощных машинах можно получить за счет правильной оптимизации циклов и операторов, находящихся внутри тела циклов.

5. Тестирование программы

Тестирование - это набор процедур и действий, предназначенных для демонстрации правильности работы программы в заданных режимах и внешних условиях. Цель тестирования - выявить наличие ошибок или убедительно продемонстрировать их отсутствие.

Процесс тестирования проходит в 3 этапа:

- проверка поведения программы в нормальных условиях;

- проверка поведения программы в экстремальных условиях;

- проверка поведения программы в исключительных ситуациях.

Каждый из этапов предполагает задание определенного, характерного для данного этапа набора данных.

5.1 Тестирование в нормальных условиях

Успешный ввод данных, для обратной связи и выбор нужных компонентов (Скриншот 1):

Скриншот - 1

5.2 Тестирование в экстремальных условиях

Провести проверку в экстремальных условиях невозможно в связи с невозможностью выбора неверных данных

5.3 Тестирование в исключительных ситуациях

Произвести тестирование исключительных ситуациях в данной программе невозможно, так как в ней используется защита от ошибок, исключающая возможность ввода неправильных данных.

Так как тестирование в нормальных, экстремальных условиях и исключительных ситуациях не выявило наличие ошибок, можно сказать, что программа работает правильно.

6. Руководство пользователя

Вводим нужный URL , для входа на сайт или пользуемся поисковиком(Скриншот 2):

Скриншот 2.

Далее слева выбираем нужную группу, в каждой можно выбрать разные компоненты компьютера(Скриншот 3):

Скриншот - 3.

Далее у нас подгружаются списки, из которых можно собрать готовый компьютер (все детали не конфликтуют друг с другом) (Скриншот 4):

Скриншот - 4

Хочу отметить, что на разных вкладках - разные комплектующие, вот например, комплектующие от 100 000 до 150 000 в сумме(Скриншот 8):

Скриншот - 8.

После заполнения данных о компьютере - следует заполнить данные о себе, для связи и утверждения заказа, а также договора об оплате (Скриншот 5):

Скриншот - 5.

Далее кликаем на кнопочку SEND NOW (Скриншот - 6) и данные будут отправляться на сервер в том виде, в котором будет нужно магазину:

Скриншот - 6.

Так должна выглядеть полностью заполненная страница, для того, чтобы клиенту можно было ответить по существу(Скриншот 7):

Скриншот - 7

ЗАКЛЮЧЕНИЕ

Целью разработки данного курсового проекта являлось разработка сайта комплектации ПК.

В ходе написания данной курсовой работы были получены практические навыки в области проектирования программы. Программа разрабатывалась с использованием стратегии анализа сообщений, реализующей метод нисходящей разработки. Анализ основывался на изучении потоков данных, обрабатываемых программой. Опыт, полученный при написании работы, подтвердил необходимость в первую очередь правильной выработки требований к программе и грамотного подхода к ее проектированию перед началом написания кода.

Заявленные цели разработки полностью достигнуты, однако, возможный недостаток, невозможность предложения добавления товара в ассортимент или же невозможность выбрать компонент из комплектации «от 100 000 р до 150 000 р» в том же «от 250 000 р»

Код сайта не имеет необходимые комментарии, однако имеет хорошую структуру, которая позволяет любому, кто знаком с языком понять то, что там прописано.

Результатом проведенной работы является правильно спроектированной сайт, а также работающий, эффективный, отлаженный и корректно отвечающий тестам соответствующих условий тестирования интерфейс.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

· JavaScript и jQuery. Интерактивная Веб-Разработка. Джон Дакетт;

· JQuery. Подробное руководство по продвинутому JavaScript. Бер Бибо, Иегуда Кац;

· HTML&CSS. Разработка и дизайн веб-сайтов. Джон Дакетт;

· CSS. Быстрый старт Луис Лазарис.

Листинг

Main.Js:

jQuery(document).ready(function($) {

'use strict';

$(window).load(function() { // makes sure the whole site is loaded

$(".seq-preloader").fadeOut(); // will first fade out the loading animation

$(".sequence").delay(500).fadeOut("slow"); // will fade out the white DIV that covers the website.

})

$(function() {

function showSlide(n) {

// n is relative position from current slide

// unbind event listener to prevent retriggering

$body.unbind("mousewheel");

// increment slide number by n and keep within boundaries

currSlide = Math.min(Math.max(0, currSlide + n), $slide.length-1);

var displacment = window.innerWidth*currSlide;

// translate slides div across to appropriate slide

$slides.css('transform', 'translateX(-' + displacment + 'px)');

// delay before rebinding event to prevent retriggering

setTimeout(bind, 700);

// change active class on link

$('nav a.active').removeClass('active');

$($('a')[currSlide]).addClass('active');

}

function bind() {

$body.bind('false', mouseEvent);

}

function mouseEvent(e, delta) {

// On down scroll, show next slide otherwise show prev slide

showSlide(delta >= 0 ? -1 : 1);

e.preventDefault();

}

$('nav a, .main-btn a').click(function(e) {

// When link clicked, find slide it points to

var newslide = parseInt($(this).attr('href')[1]);

// find how far it is from current slide

var diff = newslide - currSlide - 1;

showSlide(diff); // show that slide

e.preventDefault();

});

$(window).resize(function(){

// Keep current slide to left of window on resize

var displacment = window.innerWidth*currSlide;

$slides.css('transform', 'translateX(-'+displacment+'px)');

});

// cache

var $body = $('body');

var currSlide = 0;

var $slides = $('.slides');

var $slide = $('.slide');

// give active class to first link

$($('nav a')[0]).addClass('active');

// add event listener for mousescroll

$body.bind('false', mouseEvent);

})

$('#form-submit .date').datepicker({

});

$(window).on("scroll", function() {

if($(window).scrollTop() > 100) {

$(".header").addClass("active");

} else {

//remove the background property so it comes transparent again (defined in your css)

$(".header").removeClass("active");

}

});

});

Plugins.js:

jQuery(document).ready(function($){

var slidesWrapper = $('.cd-hero-slider');

//check if a .cd-hero-slider exists in the DOM

if ( slidesWrapper.length > 0 ) {

var primaryNav = $('.cd-primary-nav'),

sliderNav = $('.cd-slider-nav'),

navigationMarker = $('.cd-marker'),

slidesNumber = slidesWrapper.children('li').length,

visibleSlidePosition = 0,

autoPlayId,

autoPlayDelay = 5000;

//upload videos (if not on mobile devices)

uploadVideo(slidesWrapper);

//autoplay slider

setAutoplay(slidesWrapper, slidesNumber, autoPlayDelay);

//on mobile - open/close primary navigation clicking/tapping the menu icon

primaryNav.on('click', function(event){

if($(event.target).is('.cd-primary-nav')) $(this).children('ul').toggleClass('is-visible');

});

//change visible slide

sliderNav.on('click', 'li', function(event){

event.preventDefault();

var selectedItem = $(this);

if(!selectedItem.hasClass('selected')) {

// if it's not already selected

var selectedPosition = selectedItem.index(),

activePosition = slidesWrapper.find('li.selected').index();

if( activePosition < selectedPosition) {

nextSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, selectedPosition);

} else {

prevSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, selectedPosition);

}

//this is used for the autoplay

visibleSlidePosition = selectedPosition;

updateSliderNavigation(sliderNav, selectedPosition);

updateNavigationMarker(navigationMarker, selectedPosition+1);

//reset autoplay

setAutoplay(slidesWrapper, slidesNumber, autoPlayDelay);

}

});

}

function nextSlide(visibleSlide, container, pagination, n){

visibleSlide.removeClass('selected from-left from-right').addClass('is-moving').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){

visibleSlide.removeClass('is-moving');

});

container.children('li').eq(n).addClass('selected from-right').prevAll().addClass('move-left');

checkVideo(visibleSlide, container, n);

}

function prevSlide(visibleSlide, container, pagination, n){

visibleSlide.removeClass('selected from-left from-right').addClass('is-moving').one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(){

visibleSlide.removeClass('is-moving');

});

container.children('li').eq(n).addClass('selected from-left').removeClass('move-left').nextAll().removeClass('move-left');

checkVideo(visibleSlide, container, n);

}

function updateSliderNavigation(pagination, n) {

var navigationDot = pagination.find('.selected');

navigationDot.removeClass('selected');

pagination.find('li').eq(n).addClass('selected');

}

function setAutoplay(wrapper, length, delay) {

if(wrapper.hasClass('autoplay')) {

clearInterval(autoPlayId);

autoPlayId = window.setInterval(function(){autoplaySlider(length)}, delay);

}

}

function autoplaySlider(length) {

if( visibleSlidePosition < length - 1) {

nextSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, visibleSlidePosition + 1);

visibleSlidePosition +=1;

} else {

prevSlide(slidesWrapper.find('.selected'), slidesWrapper, sliderNav, 0);

visibleSlidePosition = 0;

}

updateNavigationMarker(navigationMarker, visibleSlidePosition+1);

updateSliderNavigation(sliderNav, visibleSlidePosition);

}

function uploadVideo(container) {

container.find('.cd-bg-video-wrapper').each(function(){

var videoWrapper = $(this);

if( videoWrapper.is(':visible') ) {

// if visible - we are not on a mobile device

var videoUrl = videoWrapper.data('video'),

video = $('<video loop><source src="'+videoUrl+'.mp4" type="video/mp4" /><source src="'+videoUrl+'.webm" type="video/webm" /></video>');

video.appendTo(videoWrapper);

// play video if first slide

if(videoWrapper.parent('.cd-bg-video.selected').length > 0) video.get(0).play();

}

});

}

function checkVideo(hiddenSlide, container, n) {

//check if a video outside the viewport is playing - if yes, pause it

var hiddenVideo = hiddenSlide.find('video');

if( hiddenVideo.length > 0 ) hiddenVideo.get(0).pause();

//check if the select slide contains a video element - if yes, play the video

var visibleVideo = container.children('li').eq(n).find('video');

if( visibleVideo.length > 0 ) visibleVideo.get(0).play();

}

function updateNavigationMarker(marker, n) {

marker.removeClassPrefix('item').addClass('item-'+n);

}

$.fn.removeClassPrefix = function(prefix) {

//remove all classes starting with 'prefix'

this.each(function(i, el) {

var classes = el.className.split(" ").filter(function(c) {

return c.lastIndexOf(prefix, 0) !== 0;

});

el.className = $.trim(classes.join(" "));

});

return this;

};

});

/*!

* Lightbox v2.9.0

* by Lokesh Dhakar

*

* More info:

* http://lokeshdhakar.com/projects/lightbox2/

*

* Copyright 2007, 2015 Lokesh Dhakar

* Released under the MIT license

* https://github.com/lokesh/lightbox2/blob/master/LICENSE

*/

// Uses Node, AMD or browser globals to create a module.

(function (root, factory) {

if (typeof define === 'function' && define.amd) {

// AMD. Register as an anonymous module.

define(['jquery'], factory);

} else if (typeof exports === 'object') {

// Node. Does not work with strict CommonJS, but

// only CommonJS-like environments that support module.exports,

// like Node.

module.exports = factory(require('jquery'));

} else {

// Browser globals (root is window)

root.lightbox = factory(root.jQuery);

}

}(this, function ($) {

function Lightbox(options) {

this.album = [];

this.currentImageIndex = void 0;

this.init();

// options

this.options = $.extend({}, this.constructor.defaults);

this.option(options);

}

// Descriptions of all options available on the demo site:

// http://lokeshdhakar.com/projects/lightbox2/index.html#options

Lightbox.defaults = {

albumLabel: 'Image %1 of %2',

alwaysShowNavOnTouchDevices: false,

fadeDuration: 600,

fitImagesInViewport: true,

imageFadeDuration: 600,

// maxWidth: 800,

// maxHeight: 600,

positionFromTop: 50,

resizeDuration: 700,

showImageNumberLabel: true,

wrapAround: false,

disableScrolling: false,

/*

Sanitize Title

If the caption data is trusted, for example you are hardcoding it in, then leave this to false.

This will free you to add html tags, such as links, in the caption.

If the caption data is user submitted or from some other untrusted source, then set this to true

to prevent xss and other injection attacks.

*/

sanitizeTitle: false

};

Lightbox.prototype.option = function(options) {

$.extend(this.options, options);

};

Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) {

return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages);

};

Lightbox.prototype.init = function() {

var self = this;

// Both enable and build methods require the body tag to be in the DOM.

$(document).ready(function() {

self.enable();

self.build();

});

};

// Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes

// that contain 'lightbox'. When these are clicked, start lightbox.

Lightbox.prototype.enable = function() {

var self = this;

$('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) {

self.start($(event.currentTarget));

return false;

});

};

// Build html for the lightbox and the overlay.

// Attach event handlers to the new DOM elements. click click click

Lightbox.prototype.build = function() {

var self = this;

$('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo($('body'));

// Cache jQuery objects

this.$lightbox = $('#lightbox');

this.$overlay = $('#lightboxOverlay');

this.$outerContainer = this.$lightbox.find('.lb-outerContainer');

this.$container = this.$lightbox.find('.lb-container');

this.$image = this.$lightbox.find('.lb-image');

this.$nav = this.$lightbox.find('.lb-nav');

// Store css values for future lookup

this.containerPadding = {

top: parseInt(this.$container.css('padding-top'), 10),

right: parseInt(this.$container.css('padding-right'), 10),

bottom: parseInt(this.$container.css('padding-bottom'), 10),

left: parseInt(this.$container.css('padding-left'), 10)

};

this.imageBorderWidth = {

top: parseInt(this.$image.css('border-top-width'), 10),

right: parseInt(this.$image.css('border-right-width'), 10),

bottom: parseInt(this.$image.css('border-bottom-width'), 10),

left: parseInt(this.$image.css('border-left-width'), 10)

};

// Attach event handlers to the newly minted DOM elements

this.$overlay.hide().on('click', function() {

self.end();

return false;

});

this.$lightbox.hide().on('click', function(event) {

if ($(event.target).attr('id') === 'lightbox') {

self.end();

}

return false;

});

this.$outerContainer.on('click', function(event) {

if ($(event.target).attr('id') === 'lightbox') {

self.end();

}

return false;

});

this.$lightbox.find('.lb-prev').on('click', function() {

if (self.currentImageIndex === 0) {

self.changeImage(self.album.length - 1);

} else {

self.changeImage(self.currentImageIndex - 1);

}

return false;

});

this.$lightbox.find('.lb-next').on('click', function() {

if (self.currentImageIndex === self.album.length - 1) {

self.changeImage(0);

} else {

self.changeImage(self.currentImageIndex + 1);

}

return false;

});

this.$nav.on('mousedown', function(event) {

if (event.which === 3) {

self.$nav.css('pointer-events', 'none');

self.$lightbox.one('contextmenu', function() {

setTimeout(function() {

this.$nav.css('pointer-events', 'auto');

}.bind(self), 0);

});

}

});

this.$lightbox.find('.lb-loader, .lb-close').on('click', function() {

self.end();

return false;

});

};

// Show overlay and lightbox. If the image is part of a set, add siblings to album array.

Lightbox.prototype.start = function($link) {

var self = this;

var $window = $(window);

$window.on('resize', $.proxy(this.sizeOverlay, this));

$('select, object, embed').css({

visibility: 'hidden'

});

this.sizeOverlay();

this.album = [];

var imageNumber = 0;

function addToAlbum($link) {

self.album.push({

link: $link.attr('href'),

title: $link.attr('data-title') || $link.attr('title')

});

}

// Support both data-lightbox attribute and rel attribute implementations

var dataLightboxValue = $link.attr('data-lightbox');

var $links;

if (dataLightboxValue) {

$links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]');

for (var i = 0; i < $links.length; i = ++i) {

addToAlbum($($links[i]));

if ($links[i] === $link[0]) {

imageNumber = i;

}

}

} else {

if ($link.attr('rel') === 'lightbox') {

// If image is not part of a set

addToAlbum($link);

} else {

// If image is part of a set

$links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]');

for (var j = 0; j < $links.length; j = ++j) {

addToAlbum($($links[j]));

if ($links[j] === $link[0]) {

imageNumber = j;

}

}

}

}

// Position Lightbox

var top = $window.scrollTop() + this.options.positionFromTop;

var left = $window.scrollLeft();

this.$lightbox.css({

top: top + 'px',

left: left + 'px'

}).fadeIn(this.options.fadeDuration);

// Disable scrolling of the page while open

if (this.options.disableScrolling) {

$('body').addClass('lb-disable-scrolling');

}

this.changeImage(imageNumber);

};

// Hide most UI elements in preparation for the animated resizing of the lightbox.

Lightbox.prototype.changeImage = function(imageNumber) {

var self = this;

this.disableKeyboardNav();

var $image = this.$lightbox.find('.lb-image');

this.$overlay.fadeIn(this.options.fadeDuration);

$('.lb-loader').fadeIn('slow');

this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide();

this.$outerContainer.addClass('animating');

// When image to show is preloaded, we send the width and height to sizeContainer()

var preloader = new Image();

preloader.onload = function() {

var $preloader;

var imageHeight;

var imageWidth;

var maxImageHeight;

var maxImageWidth;

var windowHeight;

var windowWidth;

$image.attr('src', self.album[imageNumber].link);

$preloader = $(preloader);

$image.width(preloader.width);

$image.height(preloader.height);

if (self.options.fitImagesInViewport) {

// Fit image inside the viewport.

// Take into account the border around the image and an additional 10px gutter on each side.

windowWidth = $(window).width();

windowHeight = $(window).height();

maxImageWidth = windowWidth - self.containerPadding.left - self.containerPadding.right - self.imageBorderWidth.left - self.imageBorderWidth.right - 20;

maxImageHeight = windowHeight - self.containerPadding.top - self.containerPadding.bottom - self.imageBorderWidth.top - self.imageBorderWidth.bottom - 120;

// Check if image size is larger then maxWidth|maxHeight in settings

if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) {

maxImageWidth = self.options.maxWidth;

}

if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) {

maxImageHeight = self.options.maxHeight;

}

// Is there a fitting issue?

if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) {

if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) {

imageWidth = maxImageWidth;

imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10);

$image.width(imageWidth);

$image.height(imageHeight);

} else {

imageHeight = maxImageHeight;

imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10);

$image.width(imageWidth);

$image.height(imageHeight);

}

}

}

self.sizeContainer($image.width(), $image.height());

};

preloader.src = this.album[imageNumber].link;

this.currentImageIndex = imageNumber;

};

// Stretch overlay to fit the viewport

Lightbox.prototype.sizeOverlay = function() {

this.$overlay

.width($(document).width())

.height($(document).height());

};

// Animate the size of the lightbox to fit the image we are showing

Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {

var self = this;

var oldWidth = this.$outerContainer.outerWidth();

var oldHeight = this.$outerContainer.outerHeight();

var newWidth = imageWidth + this.containerPadding.left + this.containerPadding.right + this.imageBorderWidth.left + this.imageBorderWidth.right;

var newHeight = imageHeight + this.containerPadding.top + this.containerPadding.bottom + this.imageBorderWidth.top + this.imageBorderWidth.bottom;

function postResize() {

self.$lightbox.find('.lb-dataContainer').width(newWidth);

self.$lightbox.find('.lb-prevLink').height(newHeight);

self.$lightbox.find('.lb-nextLink').height(newHeight);

self.showImage();

}

if (oldWidth !== newWidth || oldHeight !== newHeight) {

this.$outerContainer.animate({

width: newWidth,

height: newHeight

}, this.options.resizeDuration, 'swing', function() {

postResize();

});

} else {

postResize();

}

};

// Display the image and its details and begin preload neighboring images.

Lightbox.prototype.showImage = function() {

this.$lightbox.find('.lb-loader').stop(true).hide();

this.$lightbox.find('.lb-image').fadeIn(this.options.imageFadeDuration);

this.updateNav();

this.updateDetails();

this.preloadNeighboringImages();

this.enableKeyboardNav();

};

// Display previous and next navigation if appropriate.

Lightbox.prototype.updateNav = function() {

// Check to see if the browser supports touch events. If so, we take the conservative approach

// and assume that mouse hover events are not supported and always show prev/next navigation

// arrows in image sets.

var alwaysShowNav = false;

try {

document.createEvent('TouchEvent');

alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false;

} catch (e) {}

this.$lightbox.find('.lb-nav').show();

if (this.album.length > 1) {

if (this.options.wrapAround) {

if (alwaysShowNav) {

this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1');

}

this.$lightbox.find('.lb-prev, .lb-next').show();

} else {

if (this.currentImageIndex > 0) {

this.$lightbox.find('.lb-prev').show();

if (alwaysShowNav) {

this.$lightbox.find('.lb-prev').css('opacity', '1');

}

}

if (this.currentImageIndex < this.album.length - 1) {

this.$lightbox.find('.lb-next').show();

if (alwaysShowNav) {

this.$lightbox.find('.lb-next').css('opacity', '1');

}

}

}

}

};

// Display caption, image number, and closing button.

Lightbox.prototype.updateDetails = function() {

var self = this;

// Enable anchor clicks in the injected caption html.

// Thanks Nate Wright for the fix. @https://github.com/NateWr

if (typeof this.album[this.currentImageIndex].title !== 'undefined' &&

this.album[this.currentImageIndex].title !== '') {

var $caption = this.$lightbox.find('.lb-caption');

if (this.options.sanitizeTitle) {

$caption.text(this.album[this.currentImageIndex].title);

} else {

$caption.html(this.album[this.currentImageIndex].title);

}

$caption.fadeIn('fast')

.find('a').on('click', function(event) {

if ($(this).attr('target') !== undefined) {

window.open($(this).attr('href'), $(this).attr('target'));

} else {

location.href = $(this).attr('href');

}

});

}

if (this.album.length > 1 && this.options.showImageNumberLabel) {

var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length);

this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast');

} else {

this.$lightbox.find('.lb-number').hide();

}

this.$outerContainer.removeClass('animating');

this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() {

return self.sizeOverlay();

});

};

// Preload previous and next images in set.

Lightbox.prototype.preloadNeighboringImages = function() {

if (this.album.length > this.currentImageIndex + 1) {

var preloadNext = new Image();

preloadNext.src = this.album[this.currentImageIndex + 1].link;

}

if (this.currentImageIndex > 0) {

var preloadPrev = new Image();

preloadPrev.src = this.album[this.currentImageIndex - 1].link;

}

};

Lightbox.prototype.enableKeyboardNav = function() {

$(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this));

};

Lightbox.prototype.disableKeyboardNav = function() {

$(document).off('.keyboard');

};

Lightbox.prototype.keyboardAction = function(event) {

var KEYCODE_ESC = 27;

var KEYCODE_LEFTARROW = 37;

var KEYCODE_RIGHTARROW = 39;

var keycode = event.keyCode;

var key = String.fromCharCode(keycode).toLowerCase();

if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) {

this.end();

} else if (key === 'p' || keycode === KEYCODE_LEFTARROW) {

if (this.currentImageIndex !== 0) {

this.changeImage(this.currentImageIndex - 1);

} else if (this.options.wrapAround && this.album.length > 1) {

this.changeImage(this.album.length - 1);

}

} else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) {

if (this.currentImageIndex !== this.album.length - 1) {

this.changeImage(this.currentImageIndex + 1);

} else if (this.options.wrapAround && this.album.length > 1) {

this.changeImage(0);

}

}

};

// Closing time. :-(

Lightbox.prototype.end = function() {

this.disableKeyboardNav();

$(window).off('resize', this.sizeOverlay);

this.$lightbox.fadeOut(this.options.fadeDuration);

this.$overlay.fadeOut(this.options.fadeDuration);

$('select, object, embed').css({

visibility: 'visible'

});

if (this.options.disableScrolling) {

$('body').removeClass('lb-disable-scrolling');

}

};

return new Lightbox();

}));

/*

* MIXITUP - A CSS3 and JQuery Filter & Sort Plugin

* Version: 1.5.5

* License: Creative Commons Attribution-NoDerivs 3.0 Unported - CC BY-ND 3.0

* http://creativecommons.org/licenses/by-nd/3.0/

* This software may be used freely on commercial and non-commercial projects with attribution to the author/copyright holder.

* Author: Patrick Kunka

* Copyright 2012-2013 Patrick Kunka, Barrel LLC, All Rights Reserved

*

* http://mixitup.io

*/

(function($){

// DECLARE METHODS

var methods = {

// "INIT" METHOD

init: function(settings){

return this.each(function(){

var browser = window.navigator.appVersion.match(/Chrome\/(\d+)\./),

ver = browser ? parseInt(browser[1], 10) : false,

chromeFix = function(id){

var grid = document.getElementById(id),

parent = grid.parentElement,

placeholder = document.createElement('div'),

frag = document.createDocumentFragment();

parent.insertBefore(placeholder, grid);

frag.appendChild(grid);

parent.replaceChild(grid, placeholder);

frag = null;

placeholder = null;

};

if(ver && ver == 31 || ver == 32){

chromeFix(this.id);

};

// BUILD CONFIG OBJECT

var config = {

// PUBLIC PROPERTIES

targetSelector : '.mix',

filterSelector : '.filter',

sortSelector : '.sort',

buttonEvent: 'click',

effects : ['fade', 'scale'],

listEffects : null,

easing : 'smooth',

layoutMode: 'grid',

targetDisplayGrid : 'inline-block',

targetDisplayList: 'block',

listClass : '',

gridClass : '',

transitionSpeed : 600,

showOnLoad : 'all',

sortOnLoad : false,

multiFilter : false,

filterLogic : 'or',

resizeContainer : true,

minHeight : 0,

failClass : 'fail',

perspectiveDistance : '3000',

perspectiveOrigin : '50% 50%',

animateGridList : true,

onMixLoad: null,

onMixStart : null,

onMixEnd : null,

// MISC

container : null,

origOrder : [],

startOrder : [],

newOrder : [],

origSort: [],

checkSort: [],

filter : '',

mixing : false,

origDisplay : '',

origLayout: '',

origHeight : 0,

newHeight : 0,

isTouch : false,

resetDelay : 0,

failsafe : null,

// CSS

prefix : '',

easingFallback : 'ease-in-out',

transition : {},

perspective : {},

clean : {},

fade : '1',

scale : '',

rotateX : '',

rotateY : '',

rotateZ : '',

blur : '',

grayscale : ''

};

if(settings){

$.extend(config, settings);

};

// ADD CONFIG OBJECT TO CONTAINER OBJECT PER INSTANTIATION

this.config = config;

// DETECT TOUCH

$.support.touch = 'ontouchend' in document;

if ($.support.touch) {

config.isTouch = true;

config.resetDelay = 350;

};

// LOCALIZE CONTAINER

config.container = $(this);

var $cont = config.container;

// GET VENDOR PREFIX

config.prefix = prefix($cont[0]);

config.prefix = config.prefix ? '-'+config.prefix.toLowerCase()+'-' : '';

// CACHE 'DEFAULT' SORTING ORDER

$cont.find(config.targetSelector).each(function(){

config.origOrder.push($(this));

});

// PERFORM SORT ON LOAD

if(config.sortOnLoad){

var sortby, order;

if($.isArray(config.sortOnLoad)){

sortby = config.sortOnLoad[0], order = config.sortOnLoad[1];

$(config.sortSelector+'[data-sort='+config.sortOnLoad[0]+'][data-order='+config.sortOnLoad[1]+']').addClass('active');

} else {

$(config.sortSelector+'[data-sort='+config.sortOnLoad+']').addClass('active');

sortby = config.sortOnLoad, config.sortOnLoad = 'desc';

};

sort(sortby, order, $cont, config);

};

// BUILD TRANSITION AND PERSPECTIVE OBJECTS

for(var i = 0; i<2; i++){

var a = i==0 ? a = config.prefix : '';

config.transition[a+'transition'] = 'all '+config.transitionSpeed+'ms ease-in-out';

config.perspective[a+'perspective'] = config.perspectiveDistance+'px';

config.perspective[a+'perspective-origin'] = config.perspectiveOrigin;

};

// BUILD TRANSITION CLEANER

for(var i = 0; i<2; i++){

var a = i==0 ? a = config.prefix : '';

config.clean[a+'transition'] = 'none';

};

// CHOOSE GRID OR LIST

if(config.layoutMode == 'list'){

$cont.addClass(config.listClass);

config.origDisplay = config.targetDisplayList;

} else {

$cont.addClass(config.gridClass);

config.origDisplay = config.targetDisplayGrid;

};

config.origLayout = config.layoutMode;

// PARSE 'SHOWONLOAD'

var showOnLoadArray = config.showOnLoad.split(' ');

// GIVE ACTIVE FILTER ACTIVE CLASS

$.each(showOnLoadArray, function(){

$(config.filterSelector+'[data-filter="'+this+'"]').addClass('active');

});

// RENAME "ALL" CATEGORY TO "MIX_ALL"

$cont.find(config.targetSelector).addClass('mix_all');

if(showOnLoadArray[0] == 'all'){

showOnLoadArray[0] = 'mix_all',

config.showOnLoad = 'mix_all';

};

// FADE IN 'SHOWONLOAD'

var $showOnLoad = $();

$.each(showOnLoadArray, function(){

$showOnLoad = $showOnLoad.add($('.'+this))

});

$showOnLoad.each(function(){

var $t = $(this);

if(config.layoutMode == 'list'){

$t.css('display',config.targetDisplayList);

} else {

$t.css('display',config.targetDisplayGrid);

};

$t.css(config.transition);

});

// WRAP FADE-IN TO PREVENT RACE CONDITION

var delay = setTimeout(function(){

config.mixing = true;

$showOnLoad.css('opacity','1');

// CLEAN UP

var reset = setTimeout(function(){

if(config.layoutMode == 'list'){

$showOnLoad.removeStyle(config.prefix+'transition, transition').css({

display: config.targetDisplayList,

opacity: 1

});

} else {

$showOnLoad.removeStyle(config.prefix+'transition, transition').css({

display: config.targetDisplayGrid,

opacity: 1

});

};

// FIRE "ONMIXLOAD" CALLBACK

config.mixing = false;

if(typeof config.onMixLoad == 'function') {

var output = config.onMixLoad.call(this, config);

// UPDATE CONFIG IF DATA RETURNED

config = output ? output : config;

};

},config.transitionSpeed);

},10);

// PRESET ACTIVE FILTER

config.filter = config.showOnLoad;

// BIND SORT CLICK HANDLERS

$(config.sortSelector).bind(config.buttonEvent,function(){

if(!config.mixing){

// PARSE SORT ARGUMENTS FROM BUTTON CLASSES

var $t = $(this),

sortby = $t.attr('data-sort'),

order = $t.attr('data-order');

if(!$t.hasClass('active')){

$(config.sortSelector).removeClass('active');

$t.addClass('active');

} else {

if(sortby != 'random')return false;

};

$cont.find(config.targetSelector).each(function(){

config.startOrder.push($(this));

});

goMix(config.filter,sortby,order,$cont, config);

};

});

// BIND FILTER CLICK HANDLERS

$(config.filterSelector).bind(config.buttonEvent,function(){

if(!config.mixing){

var $t = $(this);

// PARSE FILTER ARGUMENTS FROM BUTTON CLASSES

if(config.multiFilter == false){

// SINGLE ACTIVE BUTTON

$(config.filterSelector).removeClass('active');

$t.addClass('active');

config.filter = $t.attr('data-filter');

$(config.filterSelector+'[data-filter="'+config.filter+'"]').addClass('active');

} else {

// MULTIPLE ACTIVE BUTTONS

var thisFilter = $t.attr('data-filter');

if($t.hasClass('active')){

$t.removeClass('active');

// REMOVE FILTER FROM SPACE-SEPERATED STRING

var re = new RegExp('(\\s|^)'+thisFilter);

config.filter = config.filter.replace(re,'');

} else {

// ADD FILTER TO SPACE-SEPERATED STRING

$t.addClass('active');

config.filter = config.filter+' '+thisFilter;

};

};

// GO MIX

goMix(config.filter, null, null, $cont, config);

};

});

});

},

// "TOGRID" METHOD

toGrid: function(){

return this.each(function(){

var config = this.config;

if(config.layoutMode != 'grid'){

config.layoutMode = 'grid';

goMix(config.filter, null, null, $(this), config);

};

});

},

// "TOLIST" METHOD

toList: function(){

return this.each(function(){

var config = this.config;

if(config.layoutMode != 'list'){

config.layoutMode = 'list';

goMix(config.filter, null, null, $(this), config);

};

});

},

// "FILTER" METHOD

filter: function(arg){

return this.each(function(){

var config = this.config;

if(!config.mixing){

$(config.filterSelector).removeClass('active');

$(config.filterSelector+'[data-filter="'+arg+'"]').addClass('active');

goMix(arg, null, null, $(this), config);

};

});

},

// "SORT" METHOD

sort: function(args){

return this.each(function(){

var config = this.config,

$t = $(this);

if(!config.mixing){

$(config.sortSelector).removeClass('active');

if($.isArray(args)){

var sortby = args[0], order = args[1];

$(config.sortSelector+'[data-sort="'+args[0]+'"][data-order="'+args[1]+'"]').addClass('active');

} else {

$(config.sortSelector+'[data-sort="'+args+'"]').addClass('active');

var sortby = args, order = 'desc';

};

$t.find(config.targetSelector).each(function(){

config.startOrder.push($(this));

});

goMix(config.filter,sortby,order, $t, config);

};

});

},

// "MULTIMIX" METHOD

multimix: function(args){

return this.each(function(){

var config = this.config,

$t = $(this);

multiOut = {

filter: config.filter,

sort: null,

order: 'desc',

layoutMode: config.layoutMode

};

$.extend(multiOut, args);

if(!config.mixing){

...


Подобные документы

  • Выбор инструментальных и программных средств для создания сайта. Структура программного продукта. Создание сайта при помощи программы WordPress. Тестирование разработанной программы. Разработка структуры и дизайна сайта. Наполнение сайта контентом.

    курсовая работа [1,0 M], добавлен 09.01.2014

  • Исследование классификации, средств реализации и разработки сайтов. Сравнительная характеристика конструкторов сайтов. Руководство пользователя. Заполнение материалом и отладка работы страниц. Травмирующие и вредные факторы для пользователя компьютера.

    дипломная работа [2,6 M], добавлен 22.01.2015

  • Разработка структуры базы данных сайта. Установка и настройка требуемого программного обеспечения. Анализ интерфейса программы. Создание формы обратной связи. Формирование дизайна, соответствующего требованиям заказчика. Выбор методики тестирования.

    дипломная работа [2,0 M], добавлен 22.03.2018

  • Основные требования к составу и параметрам технических средства. Верификация программного продукта. Расширение функционала программы и его реализация. Отладка и тестирование программного продукта. Тестирование программы в граничных и реальных условиях.

    курсовая работа [1,3 M], добавлен 29.12.2014

  • Понятие web-сайта и его типы. Обзор программ для создание web-сайта. Описание конструктора Jimdo. Алгоритм создания сайта для ОАО "Каменск-Уральский литейный завод" с целью уведомления посетителей о выпускаемой продукции. Руководство пользователя.

    курсовая работа [3,8 M], добавлен 05.06.2015

  • Характеристика структуры, программного обеспечения и основных бизнес–процессов ЗАГСа. Разработка базы данных и структуры сайта для молодоженов. Управление аккаунтом пользователя, описание страниц сайта. Расчёт экономических затрат на создание сайта.

    дипломная работа [448,5 K], добавлен 14.01.2013

  • Возможности среды программирования delphi при разработке приложения с визуальным интерфейсом. Разработка спецификации программного обеспечения и на ее основе кода программного продукта. Отладка программы "трассировкой", ее тестирование и оптимизация.

    курсовая работа [501,4 K], добавлен 07.12.2016

  • Создание Web-сайта "Расчет коммунальных услуг ЖКХ", факторы, определяющие принятое решение. Математический алгоритм программного продукта, техническое обеспечение. Результаты тестирования сайта gkh-tariff.ru для учета затрат ЖКХ, внедрение в Интернет.

    курсовая работа [147,6 K], добавлен 01.03.2013

  • Проектирование информационной системы для удобного ведения учета товара. Функциональная модель предметной области. Обоснование выбора языка программирования. Описание программы, руководство пользователя. Протокол тестирования программного продукта.

    курсовая работа [537,6 K], добавлен 18.09.2014

  • Особенности алгоритмов, критерии качества. Создание и применение программного продукта на языке Delphi. Тип операционной системы. Внутренняя структура программного продукта. Руководство пользователя и программиста, расчет себестоимости и цены программы.

    дипломная работа [1,5 M], добавлен 12.06.2009

  • Разработка и программная реализация сайта и базы данных, наполнение базы данных тестовой информацией о товарах. Инструментальные средства создания сайта. Организация тестирования сайта, модуль визуализации интерфейса. Создание запросов в базе данных SQL.

    курсовая работа [1,4 M], добавлен 24.12.2012

  • Общее описание разрабатываемого веб-сайта. Создание модуля учета средств для разработки программного продукта. Разработка дизайна. Редактирование веб-сайта в CMS Worspress. Разработка методических указаний для продукта. Система управления базами данных.

    дипломная работа [1,8 M], добавлен 10.07.2017

  • Понятие web-сайта и их типы. Программы для создания web-сайта. Описание структуры проекта. Алгоритм создания сайта. Описание конструктора Jimdo. Языки программирования серверного выполнения. Создание полнофункционального веб-сайта для ОАО "КУЛЗ".

    курсовая работа [3,5 M], добавлен 05.06.2015

  • Теоретические основы разработки web-сайта. Сбор и анализ данных для качественной реализации программного продукта. Разработка модели сайта магазина детских игрушек. Графическое оформление страниц. Выбор средств и технологий, тестирование и отладка.

    курсовая работа [349,2 K], добавлен 09.04.2015

  • Формулировка требований к разработке и оформлению информационного сайта предприятия. Описание архитектуры сайта, меню навигации и алгоритма работы, листинг программного кода. Выбор серверной части и процесс отладки. Методы продвижения сайта в Интернете.

    курсовая работа [4,6 M], добавлен 18.01.2014

  • Выбор средства реализации программного продукта. Разработка программного комплекса (ПК). Руководство администратору и пользователю к нему. CMS Joomla - программа, включающая в себя различные инструменты для изготовления веб-сайта. Обработка ошибок в ПК.

    курсовая работа [695,6 K], добавлен 19.06.2010

  • Проектирование модульной структуры программы сетевого мессенджера, назначение модуля "frmMsg". Разработка главной формы и интерфейса пользователя программы. Проектирование модуля формы "About". Разработка методики тестирования и отладка программы.

    курсовая работа [606,7 K], добавлен 19.01.2012

  • Структура и внутреннее содержание разрабатываемого сайта, основные требования к нему, потребители и целевая аудитория, дизайн и стилистика. Создание прототипа сайта консалтинговой компании "Финанс-консалт" с помощью программного продукта Axure RP PRo.

    контрольная работа [1,1 M], добавлен 10.01.2016

  • Сравнение языка Php с другими языками программирования web-приложений. Язык разметки гипертекстовых страниц Html. Технология Macromedia Flash, её преимущества и недостатки. Этапы создания флеш-сайта, руководство пользователя и листинг программы.

    дипломная работа [2,3 M], добавлен 04.10.2013

  • Определение целевой аудитории и схема логической связи между страницами, анализ персонального сайта Джима Керри. Создание собственного сайта с целью самопрезентации, его дизайн и план тестирования. Выбор программных средств для реализации проекта.

    дипломная работа [6,5 M], добавлен 15.06.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.