Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
1

Onclick для всех картин

20.08.2016, 11:40. Показов 1438. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Можно ли применить
Javascript
1
onclick = 'openImageWindow(this.src);'
ко всем картинам внутри конкретного div-а?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.08.2016, 11:40
Ответы с готовыми решениями:

Вызвать onclick для всех ссылок на сайте
Добрый день! Задача состоит в следующем: Нужно прокликать все ссылки на сайте, пробовал сделать...

Реализовать событие onclick для всех элементов
Суть проблемы: Есть таблица в div'e 6 на 6 элементов (квадратов), при нажатии на любой из...

Запуск onClick для всех дочерных тегов
Собственно есть код: <div class="example_path"> <div onClick="test2(this)"...

Выделение всех чекбоксов + onClick
У меня такая проблема: есть 3 элемента checkbox, которые при нажатии на каждый из них onClick,...

13
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
20.08.2016, 13:31 2
HTML5
1
2
3
4
<div class="wrapper">
  <img class="imgGetSize" src="" alt="" />
  <img class="imgGetSize" src="" alt="" /> 
</div>
Javascript
1
2
3
4
5
6
7
8
9
var images = document.querySelectorAll('.wrapper > img');
images.forEach(function(elem){
  elem.onclick= function openImageWindow() {
    var image = new Image();     
    var width = this.width;
    var height = this.height;
    window.open(this.src,"Image","width=" + width + ",height=" + height);
  }
});
0
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
21.08.2016, 10:48  [ТС] 3
mrtoxas, дело в том, что в тэги <img> вписать ничего не могу. Единственное, могу весь текст с <img> -ами разместить в блок. Т.е., JS должен обрабатывать все картины в wrapper-e, а class="imgGetSize" не должно быть.
0
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
21.08.2016, 10:52 4
Убирайте класс из тэгов. Это я экспериментировал и забыл удалить. Выборка идет по .wrapper > img
0
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
21.08.2016, 12:44  [ТС] 5
mrtoxas, да, я уже догадалась. Но не работает.
Думаю дело в том, что на самом деле в wrapper могут быть другие div-ы, и в них только картины.
wrapper > img означает прямая внедренность?
0
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
21.08.2016, 12:55 6
Это означает непосредственный потомок. Попробуйте без ">". Я ж не знаю структуру документа
0
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
21.08.2016, 12:58  [ТС] 7
mrtoxas, тоже нет
а .wrapper > div> img
должен ведь работать... а не работает
0
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
21.08.2016, 13:05 8
Дайте структуру html

Добавлено через 5 минут
querySelectorAll('.wrapper img') зацепит абсолютно все <img>, которые вложены в .wrapper, вне зависимости от их дальнейших вложенностей.
0
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
21.08.2016, 13:08  [ТС] 9
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<html>
<head>....</head>
<body>
....
<div class="secdes">
.....текст статьи....
</div>
 
<script type="text/javascript">
var images = document.querySelectorAll('.secdes > img');
images.forEach(function(elem){
  elem.onclick= function openImageWindow() {
    var image = new Image();     
    var width = this.width;
    var height = this.height;
    window.open(this.src,"Image","width=" + width + ",height=" + height);
  }
});
</script>
 
</body>
.....текст статьи.... это текст созданный в wysiwyg редакторе, т.е. там может быть все что угодно. И для всех картин там нужно применить этот скрипт.
0
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
21.08.2016, 13:14 10
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<div class="wrapper">
  <p>Tекст стати</p>
  <img src="#" alt="" />
  <div class="secdes">
    <p>Tекст стати</p>
    <img src="#" alt="" />
    <div class="secdes_second">
      <p>Tекст стати</p>
      <img src="#" alt="" />
    </div>
  </div>
</div>
Javascript
1
2
3
4
5
6
7
8
9
var images = document.querySelectorAll('.wrapper img');
images.forEach(function(elem){
  elem.onclick= function openImageWindow() {
    var image = new Image();     
    var width = this.width;
    var height = this.height;
    window.open(this.src,"Image","width=" + width + ",height=" + height);
  }
});
Результат
1
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
21.08.2016, 13:24  [ТС] 11
mrtoxas, оказывается не работает в firefox, а в гуглхром нормально. Не знаете, отчего это?
Кроме того, картины в новом окне не показываются оригинальным размером, а надо так.
0
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
21.08.2016, 13:49 12
Лучший ответ Сообщение было отмечено khrustal как решение

Решение

почему-то forEach не срабатывает. Попробуйте циклом, правда не уверен в правильности решения, может кто поправит:
Javascript
1
2
3
4
5
6
7
8
9
var images = document.querySelectorAll('.wrapper img');
  for (i = 0; i < images.length; ++i) {  
  images[i].onclick= function openImageWindow() {    
    var image = new Image();     
    var width = this.width;
    var height = this.height;
    window.open(this.src,"Image","width=" + width + ",height=" + height);
  }
}
Добавлено через 13 минут
Вот, так лучше:
Javascript
1
2
3
4
5
6
7
8
9
var images = document.querySelectorAll('.wrapper img');
[].forEach.call(images, function(elem) {
   elem.addEventListener("click", function(){ 
    var image = new Image();     
    var width = this.width;
    var height = this.height;
    window.open(this.src,"Image","width=" + width + ",height=" + height);
  });
});
1
2 / 2 / 0
Регистрация: 26.11.2013
Сообщений: 248
21.08.2016, 14:08  [ТС] 13
Спасибо большое, сработало.
Еще если можно немного доделать. Можно ли сделать так, чтобы это новое окно
1. имело размер картины (теперь оно имеет размер картины, которое указано в html коде, а там картина показывается в уменьшенном размере)
2. окно не имело строки, где указан URL
3. окно закрывалось при клике вне пределах окна
0
Эксперт JSЭксперт HTML/CSS
3825 / 2675 / 1521
Регистрация: 12.07.2015
Сообщений: 6,672
Записей в блоге: 4
21.08.2016, 15:38 14
Я думаю, такое надо делать не через открытие окна, а при помощи css. Через JS только подгружать картинки в блок и задавать ему размеры.

Добавлено через 1 час 17 минут
Надо допиливать, и придумать как загружать полную картинку, но смысл такой:
HTML5
1
2
3
4
5
6
7
8
<div class="wrapper">
  <p>Tекст стати</p>
   <img src="#" alt="" />
  <div class="secdes">
    <p>Tекст стати</p> 
    <img src="#" alt="" />
  </div> 
</div>
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
var images = document.querySelectorAll('.wrapper img');
var poPupDiv = document.createElement('div');
poPupDiv.className = "pop-up";
poPupDiv.style.width = '100%';
poPupDiv.style.height = '100%';
poPupDiv.style.top = '0';
poPupDiv.style.left = '0';
poPupDiv.style.display = 'none';
poPupDiv.style.position = 'fixed';
poPupDiv.style.background = 'rgba(0,0,0,.8)';
document.body.appendChild(poPupDiv);
var poPup = document.querySelector('.pop-up');
poPup.onclick = function() {
      this.style.display='none';
    }
images.forEach(function(elem) {
    elem.onclick = function openImageWindow() {
    poPupDiv.style.display = 'block';
    imgHeight = getComputedStyle(elem).height;
    imgWidth = getComputedStyle(elem).width;
    poPup.innerHTML = '<img src="' + elem.src + '" alt="" \
        style="position:fixed;top:50%;left:50%;\
        transform:translate(-50%,-50%);background:#fff";/>';        
  }
});
Результат
0
21.08.2016, 15:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.08.2016, 15:38
Помогаю со студенческими работами здесь

OnClick для div-а, но не для input-а в нем
есть div, в нем form, в форме - input текстовый код &lt;div id=&quot;search_box&quot;...

Событие onclick для php
описываю суть проблемы: в php форме есть элемент button $this-&gt;addElement('Button',...

Не работает функция onClick для позиционированного div
Изучаю Javascript и пытаюсь написать простенький скрипт Не могу понять, почему функция onClick,...

Не работает onclick для динамически вставляемого на страницу html
Доброго всем времени суток! Хочу сделать на сайте список с вариантами как в google. Делаю так: на...


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

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