Эффект отражения изображения


Эффект отражения изображения

777
10 из 10
Проголосовало: 1






Установка

Это в head

Code
<script type="text/javascript">  
document.getElementsByClassName = function(className) {  
  var children = document.getElementsByTagName('*') || document.all;  
  var elements = new Array();  
   
  for (var i = 0; i < children.length; i++) {  
  var child = children[i];  
  var classNames = child.className.split(' ');  
  for (var j = 0; j < classNames.length; j++) {  
  if (classNames[j] == className) {  
  elements.push(child);  
  break;  
  }  
  }  
  }  
  return elements;  
}  

var Reflection = {  
  defaultHeight : 0.5,  
  defaultOpacity: 0.5,  
   
  add: function(image, options) {  
  Reflection.remove(image);  
   
  doptions = { "height" : Reflection.defaultHeight, "opacity" : Reflection.defaultOpacity }  
  if (options) {  
  for (var i in doptions) {  
  if (!options[i]) {  
  options[i] = doptions[i];  
  }  
  }  
  } else {  
  options = doptions;  
  }  
   
  try {  
  var d = document.createElement('div');  
  var p = image;  
   
  var classes = p.className.split(' ');  
  var newClasses = '';  
  for (j=0;j<classes.length;j++) {  
  if (classes[j] != "userAvatar") {  
  if (newClasses) {  
  newClasses += ' '  
  }  
   
  newClasses += classes[j];  
  }  
  }  

  var reflectionHeight = Math.floor(p.height*options['height']);  
  var divHeight = Math.floor(p.height*(1+options['height']));  
   
  var reflectionWidth = p.width;  
   
  if (document.all && !window.opera) {  
  /* Copy original image's classes & styles to div */  
  d.className = newClasses;  
  p.className = 'reflected';  
   
  d.style.cssText = p.style.cssText;  
  p.style.cssText = 'vertical-align: bottom';  
   
  var reflection = document.createElement('img');  
  reflection.src = p.src;  
  reflection.style.width = reflectionWidth+'px';  
   
  reflection.style.marginBottom = "-"+(p.height-reflectionHeight)+'px';  
  reflection.style.filter = 'flipv progid:DXImageTransform.Microsoft.Alpha(opacity='+(options['opacity']*100)+', style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy='+(options['height']*100)+')';  
   
  d.style.width = reflectionWidth+'px';  
  d.style.height = divHeight+'px';  
  p.parentNode.replaceChild(d, p);  
   
  d.appendChild(p);  
  d.appendChild(reflection);  
  } else {  
  var canvas = document.createElement('canvas');  
  if (canvas.getContext) {  
  /* Copy original image's classes & styles to div */  
  d.className = newClasses;  
  p.className = 'reflected';  
   
  d.style.cssText = p.style.cssText;  
  p.style.cssText = 'vertical-align: bottom';  
   
  var context = canvas.getContext("2d");  
   
  canvas.style.height = reflectionHeight+'px';  
  canvas.style.width = reflectionWidth+'px';  
  canvas.height = reflectionHeight;  
  canvas.width = reflectionWidth;  
   
  d.style.width = reflectionWidth+'px';  
  d.style.height = divHeight+'px';  
  p.parentNode.replaceChild(d, p);  
   
  d.appendChild(p);  
  d.appendChild(canvas);  
   
  context.save();  
   
  context.translate(0,image.height-1);  
  context.scale(1,-1);  
   
  context.drawImage(image, 0, 0, reflectionWidth, image.height);  
   
  context.restore();  
   
  context.globalCompositeOperation = "destination-out";  
  var gradient = context.createLinearGradient(0, 0, 0, reflectionHeight);  
   
  gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");  
  gradient.addColorStop(0, "rgba(255, 255, 255, "+(1-options['opacity'])+")");  
   
  context.fillStyle = gradient;  
  if (navigator.appVersion.indexOf('WebKit') != -1) {  
  context.fill();  
  } else {  
  context.fillRect(0, 0, reflectionWidth, reflectionHeight*2);  
  }  
  }  
  }  
  } catch (e) {  
  }  
  },  
   
  remove : function(image) {  
  if (image.className == "reflected") {  
  image.className = image.parentNode.className;  
  image.parentNode.parentNode.replaceChild(image, image.parentNode);  
  }  
  }  
}  

function addReflections() {  
  var rimages = document.getElementsByClassName('userAvatar');  
  for (i=0;i<rimages.length;i++) {  
  var rheight = null;  
  var ropacity = null;  
   
  var classes = rimages[i].className.split(' ');  
  for (j=0;j<classes.length;j++) {  
  if (classes[j].indexOf("rheight") == 0) {  
  var rheight = classes[j].substring(7)/100;  
  } else if (classes[j].indexOf("ropacity") == 0) {  
  var ropacity = classes[j].substring(8)/100;  
  }  
  }  
   
  Reflection.add(rimages[i], { height: rheight, opacity : ropacity});  
  }  
}  

var previousOnload = window.onload;  
window.onload = function () { if(previousOnload) previousOnload(); addReflections(); }  
</script>


и картинку ставите куда вам надо

Code
<img class="userAvatar" src="ссылка на картинку" border="0">
Автор публикации: Загрузка
Загрузка
Вовчик, это его n материал
  • Всего комментариев: 2

ВоВаН
+1
ВоВаН написал: Написано 03 Октября 2011 в 10:03
Комментарий №2
такое же уже вроде бы было??1

GhostlyP
0
GhostlyP написал: Написано 03 Октября 2011 в 01:15
Комментарий №1
Прикольно! biggrin

  • Оставить комментарий:
Добавлять комментарии могут только зарегистрированные пользователи.
Регистрация | Вход
Меню сайта
Категории
Для помощи создания сайта uCoz 25
Скрипты и модификации для Ucoz 2113
Шаблоны форумов Ucoz 28
Шаблоны сайтов Ucoz 431
Авторство Webo4ki 309
php скрипты для ucoz 57
Графика для uCoz 40
Мини-чат
Последние комментарии
  • sasha2016tv написал:
  • Хороший скрипт
    Ох. Вижу, что обсуждение очень старое. Но!
    На других CMS так же будет все это реализовано. На нормальных CMS.
    Такое решение может подойти лишь для landing сайтов. Но и то, не думаю, что там кто то заморачивается в написании какого либо контроллера генерирования шаблона и используют прямо в лоб чистый HTML, поэтому и будут для каждой страницы свои блоки делать.

    Поэтому лучше тут все же дописать решение именно для ucoz без загрузки этих лишних блоков на странице. Ведь используя условные операторы этот код даже не будет прогружаться на странице. (Лол. Это ж доли секунд загрузки...) И что? Но давайте делать оптимальнее
    Моё авторство:)
  • 1488 написал:
  • 1488 написал:
  • Смысл исходный код? он возвращает после обновление страницы на то положение которое было... или как?
  • 1488 написал:
  • как поставить галки как скрине?
    а то невозможно поставить...
    Последние темы
    Опрос
    229
    А
    Р
    Что произойдёт: $("#...
    Статистика
    Анализ интернет сайта
    0
    онлайн
    0
    наших
    0
    чужих
    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    0
    Сегодня были
    Топ пользователей: