Форум программистов, компьютерный форум, киберфорум
HTML, CSS
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Amabile opus
109 / 65 / 25
Регистрация: 08.01.2019
Сообщений: 300
1

Увеличение картинки по клику. Проблема масштабирования

21.12.2019, 19:39. Показов 2610. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
День добрый!
Есть сайт, есть картинка на сайте. При клике картинка должна увеличиваться и показываться поверх всего остального; закрытие - клик вне картинки или крестик. Имеющийся код работает, однако есть пара нюансов.
Во-первых, когда изначальная картинка больше экрана, она при открытии банально не влезает. Задание максимального размера помогло мало. Хотелось бы хоть как-то влиять на масштаб, чтобы не разносило.
Во-вторых, во всплывающем окне нет прокрутки. С одной стороны, это сильно не мешает, когда экран достаточно большой, а картинка - средняя. Но если экран маленький, картинка просто закрывает всё, причём без прокрутки.

Реализовано это безобразие у меня на базе примера, который первым выдаёт друг всех студиозусов Интернет (под кодами ссылки на сайт-источник):
Кликните здесь для просмотра всего текста

Страница с картинкой (сама картинка на строке 28):
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<!-- ВСЕ НОВОСТИ -->
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"> 
    <title>Новости | Конная усадьба</title>
    <link rel="icon" type="image/ico" href="favicon.ico" />
 
    <link href="css/style.css" rel="stylesheet" type="text/css">
    
</head>
 
<body class="front">
 
<!-- подключить библиотеку jQuery --> 
<script src="./jquery-3.0.0.min.js"></script>
 
<div class="top-bar"></div>
<div id="container">
<script>
    $(function() { $('#menu').load('./menu.htm') })
</script>
    <div id="menu" charset="utf-8">
<!-- сюда будет подгружен файл menu.html, лежащий рядом с этим файлом -->
    </div>
    
    <div class="clear-block"></div>
    
<!-- КОНТЕНТ -->
    <div id="bottom-container">
        <div id="primary"> 
            
            
            <div class="item" id="p1">
                    <img src="images/picture1.jpg" class="fz__minimized" alt="Нажмите для увеличения" title="Картинка для увеличения" />
                    <h2>Новость 1!</h2>
                    <p class="submitted">
                    дд.мм.гг, Автор
                    <br /></p>
                    <p>Некоторый текст.</p>
                    <p>Текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст.</p>
            </div>
            
            <div class="item" id="p2">
                    <img src="images/picture2.jpg" class="fz__minimized" alt="Нажмите для увеличения" title="Картинка для увеличения" />
                    <h2>Новость 2!</h2>
                    <p class="submitted">
                    дд.мм.гг, Автор
                    <br /></p>
                    <p>Некоторый текст.</p>
                    <p>Текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст.</p>
            </div>
             
        </div>
        
        <div class="clear-block"></div>
    </div><!-- КОНЕЦ КОНТЕНТА -->
    
</div>
<!-- FOOTER -->
    <div id="footer">
        
        <p>Copyright &copy; Конная усадьба 2020.</p>
    </div><!-- КОНЕЦ FOOTER -->
        <div class="foot-bar"></div>
<script type="text/javascript" src="litezoom.js"></script>
<script type="text/javascript">$('.fz__minimized').litezoom({speed:400, viewTitle:true});</script>
</body>
</html>
Файл со стилем:
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
    #primary .item {
    border-bottom:1px dotted #8A8571;
    float:left;
    margin-bottom:20px;
    padding-bottom:15px;
}
    
/* END PRIMARY */
 
/* КАРТИНКИ*/
    /* картинка на странице */
    .minimized {
      height: 300px;
      cursor: pointer;
      border: 1px solid #FFF;
    }
     
    .minimized:hover {
      border: 1px solid yellow;
    }
     
    /* увеличенная картинка */
    #magnify {
      display: none;
     
      /* position: absolute; upd: 24.10.2016 overflow: auto; position: fixed;*/
      
      
      max-width: 600px;
      height: auto;
      z-index: 9999;
      height: 100%;
      overflow: scroll;
    }
     
    #magnify img {
      width: 90%;
      overflow: scroll;
    }
     
    /* затемняющий фон */
    #overlay {
      display: none;
     
      background: #000;
      position: fixed;
      top: 0;
      left: 0;
      height: 100%;
      width: 100%;
      opacity: 0.5;
      z-index: 9990;
    }
     
    /* кнопка закрытия */
    #close-popup {
      width: 30px;
      height: 30px;
     
      background: #FFFFFF;
      border: 1px solid #AFAFAF;
      border-radius: 15px;
      cursor: pointer;
      position: absolute;
      top: 15px;
      right: 15px;
    }
     
    #close-popup i {
      width: 30px;
      height: 30px;
      background: url(images/cross.png) no-repeat center center;
      background-size: 16px 16px;
      display: block;
    }
     
    @keyframes rota {
     25% { transform: rotate(360deg); }
    }
     
    #close-popup:hover {
      animation: rota 4s infinite normal;
      -webkit-animation-iteration-count: 1;
      animation-iteration-count: 1;
    }
Код JS:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
 * jQuery FastZoom v1.1.3
 * Copyright 2016
 * Contributing Author: Aleksey Savin
 * E-mail: asavin.work@yandex.ru
 */
 
(function($) {
 
  var methods = {
    init : function( options ) {
      var options = $.extend({
        speed: 400,
        maxWidth: 600,
        imgPadding: 10,
        overlayOpacity: '0.5',
        viewTitle: false
      }, options);
 
      return this.each(function() {
        var $this    = $(this),
            i_path   = $this.attr('src'),
            i_title  = $this.attr('title'),
            imgSize  = (options.maxWidth - options.imgPadding * 2) + "px";
 
          $this.bind('click', function() {
 
            if ( options.viewTitle && i_title ) {
              var imgPadding = options.imgPadding + "px " + options.imgPadding + "px " + ( options.imgPadding + 30 ) + "px " + options.imgPadding + "px";
            } else {
              var imgPadding = options.imgPadding + "px";
            }
 
            var lz = '<div id="lz__overlay"></div>'
                   + '<div id="lz__magnify">'
                   + '  <img src="'+i_path+'">';
 
            if ( options.viewTitle && i_title ) { lz+= '  <p>'+i_title+'</p>'; }
            lz+= ' <span id="lz__close-popup">&times;</span> </div>';
 
            $('body').append(lz);
 
            $('#lz__magnify').css({
              "display": "none",
                
              "position": "fixed",
              "max-width": options.maxWidth + "px",
              "height": "auto",
              "z-index": "9999",
              "padding": imgPadding,
              "background": "#FFFFFF",
              });
            $('#lz__magnify img').css({
              "width": imgSize,
              "margin": 0
            });
            $('#lz__magnify p').css({
             "position": "absolute",
             
              "bottom": "0",
              "left": options.imgPadding,
              "margin": "0",
              "line-height": options.imgPadding + 30 + "px"
            });
            $('#lz__magnify').css({
                "left": ( $(document).width() - $('#lz__magnify').outerWidth() )/2,
                "top": ( ($(window).height() - $('#lz__magnify').outerHeight()) )/2
              });
            $('#lz__overlay').css({
              "display": "none",
              "background": "#000",
              "position": "fixed",
              "top": "0",
              "left": "0",
              "height": "100%",
              "width": "100%",
              "opacity": options.overlayOpacity,
              "z-index": "9990"
            });
 
            $('#lz__close-popup').css({
              "position": "absolute",
              "top": "5px",
              "right": "15px",
              "font-size": "32px",
              "font-family": "Georgia",
              "line-height": "32px",
              "cursor": "pointer"
            });
 
            $('#lz__overlay, #lz__magnify').fadeIn( options.speed );
            $('#lz__overlay, #lz__close-popup').bind('click', methods.hide);
          });
 
      });
    },
    hide : function( ) {
      $('#lz__overlay, #lz__magnify').fadeOut('fast', function() {
        $('#lz__close-popup, #lz__magnify, #lz__overlay').remove();
      });
    }
  };
 
  $.fn.litezoom = function( method  ) {
 
    if ( methods[method] ) {
      return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
    } else if ( typeof method === 'object' || ! method ) {
      return methods.init.apply( this, arguments );
    } else {
      $.error( 'Метод "' +  method + '" не найден в плагине jQuery.fastzoom' );
    }
 
  };
 
})(jQuery);
https://codernote.ru/jquery/uv... kliku-new/

0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.12.2019, 19:39
Ответы с готовыми решениями:

увеличение картинки по клику
Объясните пожалуйста, как сделать чтобы картинка увеличивалась по клику и занимала скажем левый...

Увеличение картинки по клику
Доброго времени суток! Решил сделать увеличение картинки по клику и уменьшение картинки по второму...

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

Как сделать увеличение картинки по клику
Вот пример https://youtu.be/aVikmtDYUEs Как сделать так же?

2
Amabile opus
109 / 65 / 25
Регистрация: 08.01.2019
Сообщений: 300
21.12.2019, 19:45  [ТС] 2
Вот скрин проблемного места. Второй скрин - картинка адекватных размеров. Но полагаю, что и она поплывёт, если открывать на устройствах с меньшим экраном.
Миниатюры
Увеличение картинки по клику. Проблема масштабирования   Увеличение картинки по клику. Проблема масштабирования  
0
Модератор
Эксперт JSЭксперт HTML/CSS
2686 / 1758 / 760
Регистрация: 13.03.2010
Сообщений: 5,842
21.12.2019, 20:17 3
Лучший ответ Сообщение было отмечено 4eDo как решение

Решение

Для модалки зайдайте max-height: 100vh.
1
21.12.2019, 20:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2019, 20:17
Помогаю со студенческими работами здесь

Увеличение картинки по клику в детальной новости
Привет, помогите разобраться? Есть детальная новость, нужно, чтоб все картинки в теле новости...

Увеличение картинки по клику в PowerPoint 2010
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, как в PP 2010 сделать такую вещь: на...

Алгоритм масштабирования картинки, представленной виде массива байт
есть картинка- напрямую расположенная в памяти(делаю буферизацию) как byte array никак не могу...

Увеличение по клику.
Всем привет.У меня есть некоторые фото и их нужно сделать так что бы при нажатии они...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru