2013-05-24 4 views
1

Целевая страница моего сайта (http://www.chrisamaddeo.com/) имеет полноэкранный фон. Я хочу, чтобы заставить его двигаться, как пример заголовка этого веб-сайта (http://www.kaiserair.com/) Я этот код, HTML, который идет в голову моего сайта:Перемещение фона с помощью курсора

<!DOCTYPE html> 
    <html> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 
    <script> 
    $(document).ready(function() { 
var movementStrength = 25; 
var height = movementStrength/$(window).height(); 
var width = movementStrength/$(window).width(); 
$("#top-image").mousemove(function(e){ 
      var pageX = e.pageX - ($(window).width()/2); 
      var pageY = e.pageY - ($(window).height()/2); 
      var newvalueX = width * pageX * -1 - 50; 
      var newvalueY = height * pageY * -1 - 25; 
      $('#top-image').css("background-position", newvalueX+"px  "+newvalueY+"px"); 
}); 

У меня есть этот код, CSS и не работа:

#top-image { 
background:url('https://d3ui957tjb5bqd.cloudfront.net/images/screenshots/products/0/8/8905/red-rocks-park-o.jpg' -50px -25px; 
position:fixed ; 
top:0; 
width:100%; 
z-index:0; 
} 

Мой сайт размещен с Weebly и их HTML немного отличается

ответ

2

Я нахожу, что довольно трудно следовать без воссоздания и увидеть, где эти цифры берутся. Однако недавно я сделал что-то очень похожее на jQuery для кого-то другого, кроме того, что он перемещает img внутри div. Вероятно, было бы не так много, чтобы переключить его, чтобы переместить фоновое изображение (хотя выяснение размеров bg-image было бы сложным - в этом случае вы могли бы лучше их кодировать).

HTML:

<div class="container"><img src="foo.jpg" class="draggable"/> 
</div> 

JQuery:

//for each item 
$(".container").each(function(){ 
    //get the container width 
    var conWidth = $(this).width(); 
    //and its height 
    var imgHeight = $(this).find("img").height(); 
    //get the nested img width 
    var conHeight = $(this).height(); 
    //and its height 
    var imgWidth = $(this).find("img").width(); 
    //figure out how much of the image is not visible horizontally 
    var excessWidth = imgWidth - conWidth; 
    //and how much is not visible vertically 
    var excessHeight = imgHeight - conHeight; 
    //how far is this container from the left of the page 
    var containerPositionLeft = this.offsetLeft; 
    //and from the top 
    var containerPositionTop = this.offsetTop; 

    //when moving mouse over container 
    $(this).mousemove(function(e){ 
    //figure out how many pixels the mouse is from the left edge of the page 
    var mouseoffLeftPage = e.pageX; 
    //and how many from the top edge of the page 
    var mouseoffTopPage = e.pageY; 
    //figure out how many pixels the mouse is from the left edge of the page 
    var mouseoffLeftPx = mouseoffLeftPage - containerPositionLeft; 
    //and how many from the top edge of the page 
    var mouseoffTopPx = mouseoffTopPage - containerPositionTop; 
    //figure out the distance the mouse is from the left edge as a percentage (kind of - all the way to the right equals 1 not 100) 
    var mouseoffLeftPercent = mouseoffLeftPx/conWidth; 
    //do the same for height 
    var mouseoffTopPercent = mouseoffTopPx/conHeight; 
    //times the 'percentage' value by the amount of image hidden - so if your conatiner is 200px wide, your image 300px wide nd your mouse is half way across this value would be 0.5*100 which would give you 50 - which is exactly half the amount of image that is missing. 
    //note this gets set as a minus value as we will be using a minus number to shift the image around. 
    var setnewWidth = -(mouseoffLeftPercent * excessWidth); 
    //do the same for the height 
    var setnewHeight = -(mouseoffTopPercent * excessHeight); 
    //add the values as css (using transform(translate) as it's more performant and does subpixel rendering so looks smoother [or does it? it does in animations but seems as my js is not technically animating it it might not make a difference in that respect] - could set the top,left version as fallback for unsupporting browsers but ie9 supports transforms anyway so i dont care.) 
    $(this).find("img").css({"transform" : "translate("+ setnewWidth+"px ,"+setnewHeight+"px)" }); 
    //$(this).find("img").css({"left" : setnewWidth+"px", "top" : setnewHeight+"px" }); 
    }); 

}); 

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

DEMO: http://codepen.io/chrisboon27/pen/BhkJq

3

На самом деле, я просто попытался скопировать код: http://codepen.io/chrisboon27/pen/rEDIC

Это делает работу, в том, что он перемещает изображение. Мне нужно было добавить некоторые некоторые фигурные скобки в jQuery, но, возможно, вы просто пропустили их, когда вставили код в этот вопрос.

Кроме того, я просмотрел ваш сайт и заметил, что вы используете фоновый размер: обложка. Это берет ваше изображение bg и делает его подходящим в div - вы этого не хотите, так как вы хотите, чтобы какой-то bg выходил за пределы div, поэтому я в css в примере, который я связал с вами, может видеть, что я использовал calc для создания bg- размер изображения до 100% ширины + 50 пикселей. Я использовал 50px, так как ваш код в настоящее время перемещает положение фонового изображения на 25 пикселей влево или вправо, поэтому вам нужно, чтобы он был на 50 пикселей шире, чем div.

EDIT: Если вы используете известково вы должны включать в себя -webkit приставки версии тоже (если вы используете префикс свободного или prefixr добавить префиксы Здесь нет поддержки браузера:. http://caniuse.com/calc Если вам нужно поддерживать несколько браузеров вы будете необходимо установить размер фона с помощью javascript

+0

Я добавил этот код на свой сайт, код выглядит хорошо, но изображение не перемещается – Chris

+0

3 вещи: во-первых, похоже, что вы добавляете скрипт, прежде чем ссылаетесь на jQuery, поэтому код, вероятно, не работает в любом случае - вам нужно поставить код jQuery после ссылки на jQuery. Во-вторых, вы применяете css и нацеливаете jQuery на div с идентификатором #bg. Однако фон на вашей странице на самом деле находится на «теле», а не на div. Наконец, ваш #bg div пропускает закрывающий кавычек после имени идентификатора, и происходят другие странные вещи - он получает добавленную строку height: 20px, например, так что похоже, что есть проблема с вашим html. –

+0

Отредактировано над комментарием - по какой-то причине я написал круглые скобки, когда имел в виду котировочный знак - извините, если это вызвало путаницу. –

0

Проще чем это, вы можете просто убедиться, что позиция CSS установлена ​​на «фиксированную», поэтому, где бы вы ни находились на странице, она всегда находится сверху 0px.

Смежные вопросы